問題タブ [alsa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2883 参照

linux - Alsa 非同期コールバック

アプリケーション レベルで一時停止および再開機能を提供できるように、ALSA の非同期コールバック機能を使用しようとしています。しかし、関数async_add_pcm_handler()はエラーを返します (より具体的には -38 を返します)。

上記は私が使用しているコードで、関数 MyCallback が定義されています。間違いの可能性を教えてください。

0 投票する
1 に答える
2707 参照

java - JavaSoundSystemを介してALSApcm出力を使用する

複数の出力を備えたサウンドカードがあり、ALSAを使用してそれらを2つの別々のステレオチャンネルにマッピングしています。構成は正常に機能し、たとえばスピーカーテストを使用してオーディオを再生できます。

ここで、AudioSystem APIを使用して、これら2つのステレオ出力をJavaプログラムで使用したいと思います。ただし、stereo1とstereo2はMixerInfoを使用して表示されません。

私は、JavaがAudioSystemAPIを使用して公開する「デバイス」をどのように決定するかを本当に理解していません。私は現在、Ubuntu11.10システムでこれをテストしています。

これは、使用されるasound.confです。

これは、使用可能な入力と出力を表示するために使用しているコードです。

0 投票する
1 に答える
2438 参照

c - ALSA PCMコールバックの制限は何ですか?

Linuxで、ALSA(カスタムデバイスに接続)を使用して再生と記録の両方を利用するプログラムを作成しています。データの読み取りと書き込みの両方に非同期コールバックアーキテクチャを使用したいと思います。

ただし、コールバック内で許可されていることの制限に関する情報を取得できませんでした。具体的には、非同期セーフである必要がありますか?もしそうなら、これは何ができるかを厳しく制限しているようです。とりわけ、グローバル変数を参照するべきではないため、たとえば、実行のメインスレッドで満たされたバッファからの読み取りや書き込みがかなり難しくなります。バッファに保存され、その後、コールバックの外部でファイルに保存されます。

グローバルの使用をメインスレッドと調整するためにALSAコールバックで使用できるC同時実行構造はありますか?たとえば、POSIXセマフォを使用できますか?ALSAコールバックがメインスレッドに対してアトミックであるという保証はありますか(他のALSAコールバックに対してアトミックではないことはわかっています)?

人々がこれに耐えることができる洞察に感謝します。

0 投票する
1 に答える
482 参照

c - VirtualBoxのLinuxfedora13または14でalsa+c+armv5telをコンパイルします

私はプロジェクトに参加しています。このプロジェクトでは、マイク入力の音量と数デシベルのパラメーターを取得するプログラムを作成する必要があります。結果の出力であるスピーカーが低くなるか高くなるようにエントリを変更することに関心があります。環境ノイズ、マイクロレベルオーディオなど、いくつかのものによって異なります。

私は複数の意味が中国語のように聞こえることを知っています、私がそれをとてもクールと呼んでいる「パイルアップ」、あなたはARMアーキテクチャを持っていて、Linuxで使用されるarmv5telサブアーキテクチャであることを確認できましたが、私の大きなハンディキャップ=大きな問題、Cプログラムをコンパイルするのと同じようにコンパイルすることで、gccfile.coficheroOutはすでに解決されています。

しかし、Linuxオーディオライブラリ(この場合は、コンパイル方法ではなく、Linux armv5telに固有であると思います)を使用することで、典型的なLinuxオーディオプログラムの場合、彼を-lasoundに入れました。彼は、Intelとは異なるアーキテクチャになります。方法はありません。

誰かがこのアーキテクチャ、言語C、オーディオを一度に使用したことがありますか?、コンパイル方法を教えてもらえますか?

原則として、arm-gp2x-linux-gccまたはarm-none-linux-gccでコンパイルされたソリューションを見つけました。これは、すでにコンパイルされているファイルに対してliファイルを作成するためですが、コンパイルされたときとは異なります。私は必要な情報を持っていませんそのxDDはろくでなしと許し、私は以下を与えます

ファイルファイル

ELF 32ビットLSB実行可能ファイル、ARM、バージョン1、静的にリンクされ、ストリップされていない

さらに詳しい情報については、una​​meを実行するとarquitetura armv5telとして提供されますが、未知のxDD linuxを使用するのはなぜですか?

グーグルによって、私は数週間はあまり得られないので、誰かが私に説明を与えたり、私が持っているこの悪い気持ちを軽くしたりすることができればありがとう。

PS

QEMU(その特定のアーキテクチャ用のエミュレーター??)を使用する必要があります。私はfedora 13を備えた仮想マシンを使用しており、この中で編集者のKate、元arm gccでコメントしましたが、正しくコンパイルできません。

0 投票する
1 に答える
948 参照

c++ - サンプリングレートのずれと音の再生位置

たとえば、サウンドカードのレートを 44100 に設定すると、実際のレートが 44100 になることを保証できません。私の場合、アプリケーションと ALSA 間のトラフィック測定 (サンプル/秒) では、44066...44084 の値が得られました。

これはリサンプリングの問題とは関係ありません。48000 のハードウェアだけでも、「44100」モードで 44100 レートでデータを「食べる」必要があります。

この波形の再生中に波形上にカーソルを描画しようとすると、問題が発生します。次の C++ 関数を使用して、WAV ファイル (22050、...、44100、...、48000) から読み取った「理想的な」サンプリング レートと、再生開始後に費やしたミリ秒を使用してカーソル位置を計算します。

QTimer はカーソル アニメーション用のフレームを生成するために使用されますが、フレームごとに getCurrentTimeMs() (十分に正確であると仮定) で時間を尋ねるため、QTimer の精度には依存しません。したがって、さまざまなフレームレートで作業できます。

2 ~ 3 分の再生の後、私が聞いたものと私が見たものの間にわずかな違いが見られます。

ALSA のコールバックを通過するトラフィックを測定すると、44083.7 サンプル/秒の平均値が得られます。次に、この値を画面描画関数で実際のレートとして使用します。これで問題はなくなりました。このプログラムはクロスプラットフォームなので、後で Windows と別のサウンドカードでこの測定値をテストします。

しかし、サウンドとスクリーンを同期させるより良い方法はありますか? たとえば、実際に再生中のサンプル数についてサウンドカードに問い合わせる、CPU をそれほど消費しない方法はありますか?

0 投票する
0 に答える
478 参照

c++ - コールバックの実行中に ALSA がコールバックに再入力する

私のアプリケーションは、ALSA とコールバック機能を使用して、選択したサウンドを再生します。ハングアップすることもあります。私はそれを2日ほどデバッグしていましたが、ついにALSAのコールバック関数が既に実行されている間に呼び出されていることがわかりました。私はこれを使用してキャッチしました:

シーケンス「11」を印刷すると、アプリケーションがハングします。「121212...」は、アプリケーションが動作していてサウンドが再生されている間、コンソールに表示されます。

それはどのように起こりますか?

0 投票する
1 に答える
1718 参照

c - cmuSphinxの精度を向上させる方法は?

私はpocketShpinxを使用してスピーチからテキストへの単語を作成したいと思います。sphinxbaseとpocketSphinxをインストールしました。そして、音響モデル/言語モデル/辞書をダウンロードしてください。次に、次のようにサンプルコードをテストします。

DBGDEBUGが定義されている場合、エラーメッセージを出力するための単なるマクロです。


次に、マイク使用alsaから録音するコードを記述します。次のように:

そこで、生のファイルを録音します。次に、そのファイルでスピーチからテストを行います。しかし、精度は非常に悪いです。ちょうど同じようにhello、またはgo home私に与えるhotelなどMHM MHM。では、これらのコードの何が問題になっていますか?よくある質問を読みましたが、精度を向上させるために音響モデルの適応を使用する必要がありますか?

PS。ステレオをモノラルに変更します。そして音がおかしい。何を言ったのか理解できません。それで、それの何が問題になっていますか?これはその生ファイルtest.rawです

0 投票する
1 に答える
897 参照

c++ - ALSA コールバック (SIGIO ハンドラ) が boost::posix_time::microsec_clock::local_time() のどこかでハングすることがある

コールバック (snd_async_add_pcm_handler()) で ALSA を非同期モードで使用します。すべての ALSA のコールバックは、SIGIO シグナル ハンドラから呼び出されます。すべてのコールバックが私の関数getCurrentTimeMs()を呼び出します:

  • シグナル ハンドラは、前のハンドラが終了する前に呼び出すことができます。
  • 正確なサンプルレートを測定するには、ミリ秒単位の現在の時間が必要です。

    #define Zにコメントすると、ブーストが使用されます。「ブースト モード」では、オーディオの再生開始から予測できない時間が経過すると、アプリケーションがハングします。strace show アプリケーションはこれでハングします:

    しかし、0xb68dba4cはすべてのトレース ログで 2 ~ 3 回しか発生しませんでした。futex(0xb68dba4c ...は、すべての getCurrentTimeMs() 呼び出しで発生するものではありません。しかし、それが発生すると、すべてがハングし、そのgettimeofdayの後にのみ発生します。コンソールに「+.」が表示され、そのfutexが発生します。しかしその前に、アプリケーションは毎秒 50 回、各コールバックでgetCurrentTimeMs()を呼び出して、大量のサウンドを再生できます。

    #define Zを使用すると、私のコードが使用されます。この場合、アプリケーションは問題なく動作し、数ギガバイトの WAV ファイルをハングすることなく再生できます。

    アプリケーションには、boost::threadpool を介して実行される 2 つのスレッドがあり、両方ともgetCurrentTimeMs()を使用します。デッドロック エラーがあると仮定します。しかし、 #define Zがそれにどのように影響するかはわかりません。

    編集: 私の質問はこのように答えられ、私はこの答えを受け入れます:
    1) http://permalink.gmane.org/gmane.linux.alsa.devel/96282
    2) http://answerpot.com/showthread.php? 3448138-ALSA+async+callback+re-enter+and+DEADLOCK .

  • 0 投票する
    1 に答える
    1046 参照

    audio - 加工された音声データ(unsigned char)は再生できません

    操作後のオーディオ データの再生に問題があります。私が使用する唯一の API は、Linux (Ubuntu) 上の C 言語の alsa lib API です。read() を使用して unsigned char 配列 (buffer1 と呼ばれる) の 16 ビット整数 wave ファイルからデータを取得し、buffer1 を適切に再生できます。同じサイズの別の unsigned char 配列 (buffer2 と呼ばれる) にデータを渡す必要があります。buffer2[i] = buffer1[i] でループを作成すると、動作します: buffer2 は適切に再生できます。しかし、データを操作するために、それを float 配列に変換してから unsigned char に戻します (今まではオーディオ データを操作していません。float に変換してから unsigned char に戻して、その動作をテストします)。しかし、現在、buffer2 の値はすべて buffer1 の値と厳密に同じですが、buffer2 は音を立てません (buffer1 と buffer2 の多くの値の printf を作成しました。

    何が問題なのですか?

    ビクター

    0 投票する
    1 に答える
    1306 参照

    audio - 異なるインスタンスでマルチチャンネル オーディオを再生する際にエラーが発生しましたか?

    2 つのチャンネルを再生しようとしていますが、一方のチャンネルでは音声が再生され、もう一方のチャンネルでは無音が再生されています。

    10秒後、最初のチャンネルで無音を再生し、2番目のチャンネルでオーディオを再生したいと思います。

    これは、2 つの異なるターミナルでこれらのパイプラインを再生するか、バックグラウンドで 1 つを実行しながら、PC 側で実行できます。しかし、am335x ボードで 1 つのパイプラインを再生していて、もう 1 つのパイプラインを再生しようとすると、次のようになります。

    gstalsasink.c をチェックインすると、ノンブロッキング モードで snd_pcm_open が呼び出されます。

    では、なぜ他のイベントがオーディオ デバイスを使用するのをブロックするのでしょうか?

    PC側のalsasinkは完璧なので、ターゲット側で何をすべきかを誰かに提案してもらえますか。