Этот пример показывает, как настроить непрерывное аудио приобретение. Этот пример использует двухканальный микрофон.
В этом примере вы генерируете данные с помощью звуковой карты на использующем компьютеры 5,1 настроек динамика канала. Прежде чем вы начнете, проверите, что ваша среда настраивается так, чтобы можно было сгенерировать данные со звуковой картой. Для получения дополнительной информации обратитесь к "Поиску и устранению проблем в Data Acquisition Toolbox".
d = daq.getDevices
d = Data acquisition devices: index Vendor Device ID Description ----- ----------- --------- ----------------------------------------------------------------- 1 directsound Audio0 DirectSound Primary Sound Capture Driver 2 directsound Audio1 DirectSound Microphone (High Definition Audio Device) 3 directsound Audio2 DirectSound HP 4120 Microphone (2- HP 4120) 4 directsound Audio3 DirectSound Microphone (Plantronics .Audio 400 DSP) 5 directsound Audio4 DirectSound Digital Audio (S/PDIF) (High Definition Audio Device) 6 directsound Audio5 DirectSound Primary Sound Driver 7 directsound Audio6 DirectSound Speakers (Plantronics .Audio 400 DSP) 8 directsound Audio7 DirectSound HP 4120 (2- HP 4120) 9 directsound Audio8 DirectSound Speakers (High Definition Audio Device):1 10 directsound Audio9 DirectSound Speakers (High Definition Audio Device):2
Этот пример использует микрофон с устройством ID 'Audio1'.
dev = d(2)
dev = directsound: DirectSound Microphone (High Definition Audio Device) (Device ID: 'Audio1') Audio input subsystem supports: -1.0 to +1.0 range Rates from 80.0 to 1000000.0 scans/sec 2 channels ('1','2') 'Audio' measurement type
Создайте сеанс с directsound
как поставщик и добавьте канал аудиовхода в него.
s = daq.createSession('directsound');
addAudioInputChannel(s, dev.ID, 1:2);
Подготовьте сеанс к непрерывной операции.
s.IsContinuous = true
s = Data acquisition session using DirectSound hardware: Will run continuously at 44100 scans/second until stopped. Number of channels: 2 index Type Device Channel MeasurementType Range Name ----- ---- ------ ------- --------------- ------------- ---- 1 audi Audio1 1 Audio -1.0 to +1.0 2 audi Audio1 2 Audio -1.0 to +1.0
Настройте график для БПФ живого входа.
hf = figure; hp = plot(zeros(1000,1)); T = title('Discrete FFT Plot'); xlabel('Frequency (Hz)') ylabel('|Y(f)|') grid on;
type helper_continuous_fft.m
function continuous_fft(data, Fs, plotHandle) % Calculate FFT(data) and update plot with it. lengthOfData = length(data); nextPowerOfTwo = 2 ^ nextpow2(lengthOfData); % next closest power of 2 to the length plotScaleFactor = 4; plotRange = nextPowerOfTwo / 2; % Plot is symmetric about n/2 plotRange = floor(plotRange / plotScaleFactor); yDFT = fft(data, nextPowerOfTwo); % Discrete Fourier Transform of data h = yDFT(1:plotRange); abs_h = abs(h); freqRange = (0:nextPowerOfTwo-1) * (Fs / nextPowerOfTwo); % Frequency range gfreq = freqRange(1:plotRange); % Only plotting upto n/2 (as other half is the mirror image) set(plotHandle, 'ydata', abs_h, 'xdata', gfreq); % Updating the plot drawnow; % Update the plot end
DataAvailable
Прослушиватель обновляет фигуру с БПФ живого входного сигнала.
plotFFT = @(src, event) helper_continuous_fft(event.Data, src.Rate, hp);
hl = addlistener(s, 'DataAvailable', plotFFT);
Заметьте, что фигура обновляет, когда вы используете микрофон.
startBackground(s); figure(hf);
Ожидайте в течение 10 секунд, продолжая получать данные через микрофон.
pause(10);
Остановите сеанс.
stop(s); s.IsContinuous = false; delete(hl);