Modifying the example "Read from Microphone and Write to Audio File". Help!

조회 수: 6 (최근 30일)

Hi everyone!

I'm trying to modify the example "Read from Microphone and Write to Audio File" (https://kr.mathworks.com/help/audio/ref/audiodevicereader-system-object.html#mw_016e7620-9db6-4214-b22e-683336f53aba)

Firstly, I succeeded to identify what my devices are with :

deviceReader = audioDeviceReader;
devices_reader = getAudioDevices(deviceReader)
deviceWriter = audioDeviceWriter;
devices_writer = getAudioDevices(audioDeviceWriter)
playRec = audioPlayerRecorder;
devices_player = getAudioDevices(playRec)

and then,

devices_reader =
    1×3 cell array
      {'Default'}    {'주 사운드 캡처 드라이버'}    {'Analog in 01-12(AudioFire 12)'}
devices_writer =
    1×5 cell array
      {'Default'}    {'주 사운드 드라이버'}    {'Analog out 01-08…'}    {'Analog out 09-12…'}    {'스피커(Realtek Hi…'}
devices_player =
    1×2 cell array
      {'Default'}    {'ASIO Echo FireWire'}

I connected my smartphone which are playing music with an AUX cable to Analog input #2.

And I expect 'myRecording.wav' should have 5 seconds part of the music playing by my phone.

But I don't know which value is the corresponding one.

So I modified the example "Read from Microphone and Write to Audio File" with 3 cases like below :

% deviceReader = audioDeviceReader;                                          % case 1
% deviceReader = audioDeviceReader('Device','Analog in 01-12(AudioFire 12)');% case 2
% deviceReader = audioDeviceReader('Driver','ASIO');                         % case 3
setup(deviceReader);
info(deviceReader);
fileWriter = dsp.AudioFileWriter('myRecording.wav');
disp('Recording...')
tic;
while toc < 5
    acquiredAudio = deviceReader();
    fileWriter(acquiredAudio);
end
disp('Recording complete.')
release(deviceReader);
release(fileWriter);

but I can't hear anything with the result 'myRecording.wav' in all 3 cases! I attach the returned messages by

    info(deviceReader);

case 1.

ans = 
    struct with fields:
                    Driver: 'DirectSound'
                DeviceName: '주 사운드 캡처 드라이버'
      MaximumInputChannels: 2
>> Ex6_Read_from_Mic_and_wirte_Audio_file
Recording...
Recording complete.

case 2.

ans = 
    struct with fields:
                    Driver: 'DirectSound'
                DeviceName: 'Analog in 01-12(AudioFire 12)'
      MaximumInputChannels: 12

case 3.

ans = 
    struct with fields:
                    Driver: 'ASIO'
                DeviceName: 'ASIO Echo FireWire'
      MaximumInputChannels: 12

what should I change ?

채택된 답변

Gabriele Bunkheila
Gabriele Bunkheila 2018년 7월 2일
편집: Gabriele Bunkheila 2018년 7월 3일
Hi Nuri,
You code looks fine on the surface and this should indeed work with no issues. Since you are using channel #2 as input, can I double-check that you tried setting that on the object? You can use either of
deviceReader.NumChannels = 2;
or
deviceReader.ChannelMapping = 2;
The first will return a Nx2 matrix, the second only a N-long column vector if you keep NumChannels equal to 1. Please let us know how this goes.
Good luck!
Gabriele.
  댓글 수: 1
nuri an
nuri an 2018년 7월 3일
편집: nuri an 2018년 7월 3일
Thanks, Gabriele! I solved the problem by getting your answer about ChannelMapping. The result of your code was same as your expectation.
And by your help, I could go to the next step : using "audioPlayerRecorder".
But I have another problem of ChannelMapping.
When I modified ChannelMapping from [1,2] to [2,1], then it works.
And when I increase the # of channels, i.e from [1,2,3,4] to [2,1,3,4], then it works as well.
But from [1,2,3,4] to [2,3, 1,4], then it doesn't work. the result is same as [1,2,3,4] to [2, 1,3,4].
And this phenomena happen when [1,2,3,4] to [2,3,4, 1] case too.
I wrote another question post. below is the link of it. Please see the detail and give me some advice. ( https://kr.mathworks.com/matlabcentral/answers/408547-about-when-4-channels-or-more-cases-of-the-example-nondefault-channel-mapping-for-audio-output )
Thank you for your help.
Best regards,
Nuri

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Ajey Pandey
Ajey Pandey 2018년 6월 29일
Hi, Nuri!
I tried your code on my machine (with a microphone-headset combo), and I managed to get a .wav file with audio.
I'd check the hardware on your computer. Try checking the sound settings of your computer. There should be a tab in system settings for audio devices, and it will probably have a little meter to show whether there's audio coming into that input. There's a decent chance that your audio input (especially if it's designed for headsets) might not be reading the audio from your phone.
I'd also try extending the length of time you record by. When I tried, the first three seconds of audio got cut off the .wav file.
Hope this helps!
  댓글 수: 1
nuri an
nuri an 2018년 6월 30일
편집: nuri an 2018년 6월 30일
Hi Ajey, Thank you for testing and answering my question!
I tried your advise, but I checked the meter whether the input signal from my phone to audio card is going well. and my MATLAB code still doesn't work.
Here I attach the picture of my audio-interface. you can see the Audiofire12 console.
You can see the audio signal is going well.
From your testing, I found out that my code has no wrong point but the problem is my device.
As I know the Audio system toolbox is supporting the devices using AISO driver, But I don't know why MATLAB can't identify my devices..
Thank you
Regards,

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Audio I/O and Waveform Generation에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by