How do I save adw modified audio to a wav file
32 次查看(过去 30 天)
显示 更早的评论
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);
0 个评论
回答(2 个)
Walter Roberson
2024-11-6,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
2024-11-6,7:17
Hi @mark palmer
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!
2 个评论
Walter Roberson
2024-11-6,7:35
This code suffers from the same buffering problem that I discussed recently in https://www.mathworks.com/matlabcentral/answers/2164200-serial-real-time-plotting-and-storaging-streaming-data-from-arduino-slowing-down-badly-over-time#answer_1541420
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Measurements and Spatial Audio 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!