2012-03-14 1 views
2

MATLAB에서 sound() 함수를 사용하여 톤을 생성하고 있습니다. 다음 함수는 440Hz로에서 4 초 동안 신호음이 들리고 :MATLAB : audioplayer()

duration = 4 
toneFreq = 440 
samplesPerSecond = 44100; % the bit rate of the tone 
y = sin(linspace(0, duration * toneFreq * 2 * pi, round(duration * samplesPerSecond))); % the equation of the sound wave 
sound(y, samplesPerSecond); % play the sound wave at the specified bit rate 

때때로 (기능 몇 번 사용 후), 나는 "소리 창을 등록 할 수 없습니다"라는 MATLAB에서 오류가 발생합니다. 조금 인터넷을 둘러 보았는데, 이것이 MATLAB (버전 R14 SP3)의 알려진 버그이므로 일반적인 조언은 'audioplayer' function을 대신 사용하는 것으로 보입니다. 따라서 코드를 다음과 같이 업데이트했습니다 :

duration = 4 
toneFreq = 440 
samplesPerSecond = 44100; % the bit rate of the tone 
y = sin(linspace(0, duration * toneFreq * 2 * pi, round(duration * samplesPerSecond))); % the equation of the sound wave 
player = audioplayer(y, samplesPerSecond); % play the sound wave at the specified bit rate 
play(player) 

그러나 이것은 소리를 내지 않습니다. 누구든지이 새로운 코드 작업을 만들 수 있습니까?

+0

새 코드가 저에게 효과적입니다. 이전 코드가 얼마 동안 작동하고 멈추었 기 때문에 Java 또는 오디오 드라이버와 관련이있을 수 있습니다. 확실하지 않습니다. MATLAB 또는 컴퓨터를 다시 시작하려고 시도 했습니까? – yuk

+0

이전 코드는 작동하지만 가끔 실패하고 오류 메시지가 생성됩니다. 그런 다음 MATLAB을 다시 시작해야합니다. ( – CaptainProg

+0

문제의 근본 원인을 찾았습니다. 코드가 자체 함수 내에 있습니다. 함수가 끝나면 사운드 재생이 중지됩니다. 마지막 함수는 소리가 실제로 시작되기 전에 소리가 멈추는가? 이것을 극복하는 방법 – CaptainProg

답변

1

해결책을 찾았습니다. 함수가 종료 될 때 오디오 재생이 중지되는 것 같습니다. 그래서 play()를 playblocking()으로 변경해야했습니다. 이렇게하면 사운드가 끝날 때까지 컨트롤이 돌아 가지 않습니다. 그러나 이상적인 솔루션은 아닙니다 (소리가 계속 재생되는 동안 상위 기능으로 컨트롤을 전달하는 것이 좋을 것입니다.)하지만 지금은 그렇게 할 것입니다. 누구나 컨트롤을 다시 전달할 수있는 방법을 제안 할 수 있다면 이 전체 사운드를 재생합니다. 감사하게 생각합니다.

duration = 4 
toneFreq = 440 
samplesPerSecond = 44100; % the bit rate of the tone 
y = sin(linspace(0, duration * toneFreq * 2 * pi, round(duration * samplesPerSecond))); % the equation of the sound wave 
player = audioplayer(y, samplesPerSecond); % play the sound wave at the specified bit rate 
playblocking(player) 

편집 : 여기에 최종 코드 인 솔루션은 함수가 종료 후 계속 재생 허용 것으로 밝혀졌다. MATLAB: Having audioplayer() continue to play after function ends을 참조하십시오.

+0

나는이 새로운 질문에 대한 추가 질문을하고, 링크를 작성하고 대답을 수락 할 것을 권장합니다. – yuk