Armadilloフォーラム

PortAudioを使用した音声出力を行いたい(デバイス設定について)

h_tsushima

2024年7月23日 10時53分

お疲れ様です。現在、研究でPortAudioを使用した実験を行っているのですが、所望した動作をしません。知恵を貸していただきたいです。
aplay -D default <音声ファイル名>をターミナルで実行すると所望のデバイスから音声が再生されるのですが、ソースコードを実行すると音声が再生されません。以下、原因の特定に必要だと思われる情報を詳述します。
// 出力デバイスに関するソースコード(getDeviceindexは引数の名前のデバイス番号を取得する関数です)
// 音声ファイルとデバイスの設定が一致していることは確認済み
PaDeviceIndex outputDevice = getDeviceIndex("default");
PaStreamParameters outputParams;
outputParams.device = outputDevice;
outputParams.channelCount = NUM_CHANNELS;
outputParams.sampleFormat = paFloat32;
outputParams.suggestedLatency = Pa_GetDeviceInfo(outputDevice)->defaultHighOutputLatency;
outputParams.hostApiSpecificStreamInfo = nullptr;

// ストリームのオープン
err = Pa_OpenStream(&stream,
&inputParams,
&outputParams,
SAMPLE_RATE,
FRAMES_PER_BUFFER,
paClipOff,
audioCallback,
&data);
// 実行結果(ターミナル出力のみ)
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
Card 0: HDA Intel PCH (PCH)
Playback Device 0: ALC897 Analog
Capture Device 0: ALC897 Analog
Capture Device 2: ALC897 Alt Analog
Playback Device 3: HDMI 0
Playback Device 7: HDMI 1
Playback Device 8: HDMI 2
Playback Device 9: HDMI 3
Card 1: USB Sound Blaster HD (HD)
Playback Device 0: USB Audio
Capture Device 0: USB Audio
Playback Device 1: USB Audio #1
Capture Device 1: USB Audio #1
Playback Device 2: USB Audio #2
Output Device ID: 21
Name: default
Max Output Channels: 32
Default Sample Rate: 44100
// ~/.asoundrc
pcm.!default {
type plug
slave.pcm "plughw:1,0"
}

ctl.!default {
type hw
card HD
}

aplay -D plughw:1,0 <音声ファイル名>でも再生されることを確認しています。再生されない原因がわかりません。ご協力よろしくおねがいします。

コメント

at_dominique.m…

2024年7月23日 17時10分

h_tsushimaさん

お世話になっています、
マルティネです。

> お疲れ様です。現在、研究でPortAudioを使用した実験を行っているのですが、所望した動作をしません。知恵を貸していただきたいです。

Armadillo とあまり関係なく、こちらで PortAudio の経験がないですが、ログをみたところで「invalid card 'card'」等のメッセージでデバイスの選択を確認した方がいいかもしれません。

PortAudio の例を参考にすると「outputParameters.device = Pa_GetDefaultOutputDevice()」で設定していますが、「default」というデバイス名からするとそちらで確認すればいかがでしょうか。
(getDeviceIndex は検索しても出ませんので、こちらで確認のしようがなさそうです)
https://github.com/PortAudio/portaudio/blob/master/examples/paex_sine.c

device だけでまだ問題でしたら、どれかの例をそのまま実行してみてそちらで出力できるかを確認してからそちらとの違い探しになりますね。

よろしくお願いします