How do I save adw modified audio to a wav file
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (2)
Walter Roberson
am 6 Nov. 2024
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
am 6 Nov. 2024
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 Kommentare
Walter Roberson
am 6 Nov. 2024
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
Siehe auch
Kategorien
Mehr zu Audio I/O and Waveform Generation finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!