2016-10-24 11 views
0

私はtinyalsaを使用するために必要最小限のプログラムをしようとするんだけど、pcm_startは常に失敗し、-1を返すと9errnoを設定する(EBADF、すなわち不正なファイル番号)。この前にpcm_openを呼び出すと、null以外のポインタが返されますが、errno22に設定します。tinyalsa:pcm_start利回り不正なファイル番号エラー

tinyalsaのドキュメントがないようですので、私は何をすべきか理解していません。私はalsa(tinyalsaではない)の例に基づいてプログラムを作成し、tinyalsaのヘッダファイルを読んだ。誰でもガイダンスを提供できますか?

pcm * dev = pcm_open(1, 0, PCM_OUT, &config); 
if (err = pcm_start(dev)) printf("err: %d\t errno: %d\n", err, errno); 

pastebin上で利用可能なフルコード)

Iはaplay --list-devicesからpcm_openの最初の二つの引数の値を推測する、出力:

**** List of PLAYBACK Hardware Devices **** 
card 1: PCH [HDA Intel PCH], device 0: ALC3232 Analog [ALC3232 Analog] 
    Subdevices: 1/1 
    Subdevice #0: subdevice #0 

(私はコンパイルしていアンドロイドではなく私のワークステーションでこれを実行してください)

+1

もちろん、 'pcm_open'は失敗しました。なので、 'dev-> error'を表示してください。 – user58697

+0

ありがとう@ user58697。メッセージは 'can not set hw params:Invalid argument'です。通常のalsaを使用していた場合は、 'plugin'レイヤーを使用しますが、これはオプションではないようですので、変更する必要があるかどうかまだ分かりません。 – JellicleCat

答えて

0

今すぐpcm.cを見て、cannot set hw paramsメッセージは、ライン865から来て、

if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, &params)) { 

paramsconfigから初期化されます。この場所で私は言うことはありません。私の最善の推奨は、pcm_openをデバッガに置き、paramsについて考えてみることです。

3

私はTinyALSAプロジェクトのメンテナーの一人です。

あなたのコードを間違えて確認する必要があります。

dev = pcm_open(1, 0, PCM_OUT, &config); 
if (dev == NULL) { 
    /* memory allocation failure */ 
} else if (!pcm_is_ready(pcm)){ 
    printf("error: pcm_open: %s\n", pcm_get_error(pcm)); 
} 

そしてTinyALSAは、お使いのデバイスを開くことができませんでした理由はあなたを教えてください:

これは、あなたが正しくPCM構造の故障をチェックする方法をです。

それは、あなたの問題のデバッグに役立つGitHub上の問題を提出し、コードへのリンク、pcm_open後のエラーメッセージ、および/dev/sndでディレクトリの内容のリストが含まれていない場合。

また、APIに関するドキュメントは間違いなく進行中です。私はエラーチェックのビットをpcm_openにmasterブランチに含めました。何かをさらに明確にする必要がある場合は、問題を作成してください!

ありがとうございました

+0

ありがとうございます。私はここで何が起こっていたのか思い出してほしい。私は今、tinyalsaが働いている。 – JellicleCat

+1

@ JellicleCat、私がペーストビンから見たコードの問題は、あなたの期間サイズと期間数です。私が正しくリコールした場合、有効なパラメータが何であるかを判断するのに役立つtinypcminfoというプログラムがあります。通常、期間サイズは1024で、期間数は4で十分です。しかしそれはあなたがオーディオでやっていることにかかっています。 – tay10r

関連する問題