How do I save adw modified audio to a wav file

7 views (last 30 days)
mark palmer
mark palmer on 6 Nov 2024 at 6:59
Commented: mark palmer on 6 Nov 2024 at 16:03
How do I savef this modified adw audio to a wav file without having to play it? Audiowrite here doesn't work here to save.
filename = 'speech_dft.mp3';
SpeedFactor = 4/1;
WindowLen = 1024;
OverlapLength = 896;
% Define audio source
reader = dsp.AudioFileReader(filename, ...
'SamplesPerFrame',(WindowLen - OverlapLength));
adw = audioDeviceWriter('SampleRate',reader.SampleRate);
% Define time scale modification object
ats = audioTimeScaler('Window',sqrt(hann(WindowLen,'periodic')), ...
'OverlapLength',OverlapLength, ...
'SpeedupFactor', SpeedFactor);
while ~isDone(reader) % THIS PLAYS THE MODIFIED RESULTS
x = reader();
y = ats(x); % AUDIO TIME SCALER
adw(y); % AUDIO DEVICE WRITER
end
% THIS SAVES THE MODIFIED RESULTS
audiowrite('output_file.wav', y, 44100, 'BitsPerSample', 16);
% THIS SAVES the object to a file
% save('adw.mat', 'adw');
release(reader);
release(adw);

Answers (2)

Walter Roberson
Walter Roberson on 6 Nov 2024 at 7:09
Use dsp.AudioFileWriter
Note: in your current code, the y that you audiowrite() would represent only the last buffer-full of data, and not the entire transformed data.

Sameer
Sameer on 6 Nov 2024 at 7:17
To save the modified audio to a WAV file without playing it, you can use a buffer to collect the processed audio data and then write it to a file using "audiowrite".
Here's how you can modify your code:
filename = 'speech_dft.mp3';
SpeedFactor = 4/1;
WindowLen = 1024;
OverlapLength = 896;
% Define audio source
reader = dsp.AudioFileReader(filename, ...
'SamplesPerFrame', (WindowLen - OverlapLength));
% Define time scale modification object
ats = audioTimeScaler('Window', sqrt(hann(WindowLen, 'periodic')), ...
'OverlapLength', OverlapLength, ...
'SpeedupFactor', SpeedFactor);
% Initialize a buffer to store the modified audio
buffer = [];
while ~isDone(reader)
x = reader();
y = ats(x); % AUDIO TIME SCALER
buffer = [buffer; y]; % Append the processed audio to the buffer
end
% Save the entire buffer as a WAV file
audiowrite('output_file.wav', buffer, reader.SampleRate, 'BitsPerSample', 16);
release(reader);
Hope this helps!

Categories

Find more on Measurements and Spatial Audio in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!