23700


お世話になります。  
Raspberry PiとPyAudioを使ってwaveファイルを再生すると  
waveファイルの再生時に遅延と音がブチブチ途切れる現象  
が発生しており  
原因を探っております。

以前一度同じような事を試した際は、このような現象は起こっておらず、何か  
音声再生で入れ忘れたライブラリ等がないか探しておりますが  
原因が掴めず、困っております。

以前の設定で、PyAudioの再生の際にALSAのエラーログが  
多数吐き出されていたことを思い出し、ログを漁ったところ  
エラーログに以下の違いがあることは分かっております。（下記に掲載させて頂きます。）

PyAudio再生に使っているコードは、PyAudio Documentationに掲載されている  
「Blocking Mode Audio I/O」 のコードをそのまま使っております。

PyAudioでの再生に使っているコードは、PyAudio Documentationに掲載されている  
「Blocking Mode Audio I/O」 のコードをそのまま使っております。

※ちなみに「Callback Mode Audio I/O」のコードでは問題なく再生されました。  
以前はそちらを使っていないことと、Blocking形式を使って  
再度通常の音を鳴らしたいと考えております。

PyAudioをインストールする際に「Portaudio19-dev」はインストール済みです。

何か不足情報がありましたら御指摘頂ければと思います。  
音声回りの知識が乏しいので、設定で  
何か試すべき事等を御助言頂けるだけでもたすかります。  
こうすれば普通に再生できたという情報もとてもありがたいです。

OS Raspbian Jessie kernel 4.1  
PyAudio Version 0.2.9  
Python 2.7

4/2 追記 --ここから

Raspbianの構築手順を記載いたします。  
OSは導入された前提で

rootユーザで以下を実施

[code]

        #apt-get install portaudio19-dev
        #apt-get install python-dev (updateがかかります)
        #pip install pyaudio
    
[/code]

home等に環境を作る

[code]

        # mkdir /home/test
    
[/code]

gitでソースを持ってくる(githubで公開しております)

[code]

        # git clone https://github.com/toshift/PyAudio.git
    
[/code]

cloneした環境で以下を実施 /home/test/Pyaudio とします。

[code]

        # Python pyaudio_blocking /home/test/Pyaudio/sound/00.wav
        # Python pyaudio_blocking /home/test/Pyaudio/sound/01.wav
    
[/code]

→これでどちらかで異音がなります。  
pyaudio_callbackでは発生しないです。

\---ここまで

現在出ているALSAのログ（音が遅延とブチブチ途切れる）

[code]

    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
    Cannot connect to server socket err = No such file or directory
    Cannot connect to server request channel
    jack server is not running or cannot be started
    
[/code]

以前普通に再生できていたときのALSAのログ（こちらの方がエラーが多かったです）

[code]

    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM sysdefault
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_card_driver     returned error: No such file or directory
    ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
    ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_refer returned     error: No such file or directory
    ALSA lib conf.c:4771:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default
    ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
    ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
    ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:4771:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default
    ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
    ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
    ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
    ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:4771:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM dmix
    Cannot connect to server socket err = No such file or directory
    Cannot connect to server request channel
    
[/code]

宜しくお願い致します。


CC BY-SA 3.0
2016-03-31T07:56:01.883
23655
2016-04-03T14:26:45.390
2016-04-02T10:33:34.653
14694
14694
question
python raspberry-pi raspbian
Raspberry PiでPyAudioを使ってwaveファイルが正常に鳴らない


原因は解りませんが、正常な音が鳴るようになったので報告です。

portaudio snapshot において、src/hostapi/alsa/pa_linux_alsa.c の 1987行目付近に

[code]

        self->canMmap = alsa_snd_pcm_hw_params_test_access( pcm, hwParams, accessMode ) >= 0 ||
                        alsa_snd_pcm_hw_params_test_access( pcm, hwParams, alternateAccessMode ) >= 0;
    
[/code]

という行があるので、この下に

[code]

        self->canMmap = 0;
    
[/code]

を追加し、ビルド、インストールしてください。apt-get でインストールした portaudio はアンインストールしておくのが良いと思います。

流すデータの型は float にしてください。S16 はこれでは正常に鳴りません(頂いた python のテストプログラムで正常に鳴りませんでした)。

私がテストに使ったのは portaudio の paex_write_sine という example です。  
上記の修正で正常な音が鳴っていました。  
pyaudio からでも、これらの条件を満たせば正常な音が鳴るのではないかと思っています。

ただし、これでもまだたまにブツブツいいますが、その時は、そのプログラムを再起動すれば、次回はきっと正常な音が鳴ります。

私の環境:  
raspberry-pi B(たぶん), archlinux arm, kernel 4.1.20, gcc 5.3.0


CC BY-SA 3.0
2016-04-03T11:42:13.663
23700
2016-04-03T14:26:45.390
2016-04-03T14:26:45.390
5288
5288
23655
answer