オーディオ再生のリアルタイム制御:Pyaudioに基づく固定期間のサウンド生成と停止はありません
この記事の目的は、ボタンを押して音声を開始する必要性を実装し、Pyaudioを使用してオーディオを生成するときにすぐに再生を停止する必要があることを解決することを目的としています。リアルタイムのオーディオコントロールは、元のコードのループ構造を変更し、不必要な遅延とフラグビットリセットを削除することにより実現されます。同時に、オーディオストリームを停止する操作がループから削除され、停止する必要があるときに正しく実行できることを確認します。
元のコードには問題があります。つまり、オーディオを再生するwhileループ、time.sleep(1)とplay = falseが設定されているため、オーディオは1回だけ再生を停止します。ボタンを押してボタンをリリースしてすぐに停止するときに連続的に再生される効果を実現するには、ループ構造を調整し、適切な時期にオーディオストリームが停止することを確認する必要があります。
これが修正されたコードの例です。
インポート時間 rtmidi.midiutilからImport open_midiinputから npとしてnumpyをインポートします Pyaudioをインポートします p = pyaudio.pyaudio() #play = true#再生フラグボリュームを削除= 0.5#範囲[0.0、1.0] FS = 44100#サンプリングレート、Hz、整数でなければなりません #duration = 5.0#数秒で、floatになる場合があります FB = 493.88 FC = 523.25 FD = 587.33 Frekvence = 440 frekvence_seznam = { (144、32):FA、 (144、33):FB、 (144、34):FC、 (144、35):FD、 } ポート= 0 Midiin、port_name = open_midiinput(port) ストリーム=なし#initializeストリーム 試す: 本当です: msg = midiin.get_message() MSGの場合: #klic = tuple(vstupni_list [:2]) メッセージ= msg klic =メッセージ[0] lepsi_klic = tuple(klic [:2]) 印刷(メッセージ[0]) frekvence_seznamのlepsi_klicの場合: print( "je to tam") frekvence = frekvence_seznam [lepsi_klic] 期間= 2 * np.pi x = inper * np.arange(fs * 0.1) * frekvence / fs #reduce lag sinus = np.sin(x) square = np.sign(sinus) トライアングル= 2/np.pi * np.arcsin(np.sin(x)) saw = abs((x%期間)-1) curvy_triangle =(abs((x%期間)-1))** 2 samples =(triangle).astype(np.float32) #Pafloat32の場合、サンプル値は範囲でなければなりません[-1.0、1.0] ストリームがNONT ORT ORT STREEM.IS_ACTIVE():#ストリームが初期化されているか閉じられているかを確認します= p.open(format = pyaudio.pafloat32、 チャネル= 1、 レート= fs、 output = true) vysledek = volume *サンプル #Spusteni Zvuku stream.write(vysledek)#remove while loop and enoling ento elif lepsi_klic ==(144、81): 出口() それ以外:#STOPプレーバックストリームがない場合はキーが持ち上げられている場合、Stream.is_active(): stream.stop_stream() #stream.close()#stream closeは、keyboardinterruptを除き、ループの外側に配置されます。 印刷( "終了プログラム") ついに: ストリームがいない場合、stream.is_active(): stream.stop_stream() ストリームがいない場合: stream.close() p.terminate()
変更の手順:
- Play Flag and Time.Sleep(1)を削除: Playフラグを使用してループを制御し、MIDIメッセージを受信するときに直接オーディオを再生します。不必要な遅延を避けるために、睡眠(1)を削除しました。
- Stream.stop_stream()をキーリフトイベント処理に移動します。MIDIキーリフトイベントが検出された場合(または再生を停止するその他の条件)、Stream.stop_stream()を呼び出してオーディオストリームを停止します。
- ストリームの初期化: While Loopの前にストリームを初期化なしに初期化し、再生する必要があるときにオーディオストリームを作成します。繰り返し作成された作成を避けるために、各再生の前にストリームが初期化されているか閉じられているかを確認します。
- 例外処理:試行を使用してください...を除き...最後に構造を構成して、プログラムが出口時にオーディオストリームとpyaudioを正しく閉じていることを確認します。 keyboardinterruptは、Ctrl Cなどの割り込み信号をキャプチャするために使用され、最後にブロックは、あらゆる状況でリソースを解放できるようにします。
- 期間の短縮: NP.Arangeの期間を短縮して、遅れを避けます。
注:
- MIDI入力デバイスが正しく接続され、構成されていることを確認してください。
- 実際のニーズに応じて、ボリューム、FS、frekvence_seznamなどのパラメーターを調整します。
- stream.close()およびp.terminate()をプログラムの最後に呼び出して、リソースを解放する必要があります。最終的にブロックに入れることをお勧めします。
- ボリューム制御、トーン調整など、必要に応じて、より複雑な制御ロジックを追加できます。
要約:
ループ構造を変更し、不必要な遅延とフラグを削除することにより、Pyaudioに基づくリアルタイムのオーディオ再生コントロールを実現できます。重要なのは、適切なタイミングでオーディオストリームを開始および停止し、リソースの正しいリリースを確保することです。上記のコードは、実際のニーズに応じて拡張およびカスタマイズできる基本的なフレームワークを提供します。
以上がオーディオ再生のリアルタイム制御:Pyaudioに基づく固定期間のサウンド生成と停止はありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Pyodbcのインストール:Pipinstallpyodbcコマンドを使用してライブラリをインストールします。 2.接続sqlserver:pyodbc.connect()メソッドを介して、ドライバー、サーバー、データベース、uid/pwdまたはtrusted_connectionを含む接続文字列を使用し、それぞれSQL認証またはWindows認証をサポートします。 3.インストールされているドライバーを確認します:pyodbc.drivers()を実行し、「sqlserver」を含むドライバー名をフィルタリングして、「sqlserverのodbcdriver17」などの正しいドライバー名が使用されるようにします。 4.接続文字列の重要なパラメーター

httpx.asyncclientを使用して、非同期httpリクエストを効率的に開始します。 1.基本的なGETリクエストは、asyncwithを介してクライアントを管理し、awaitclient.getを使用して非ブロッキングリクエストを開始します。 2。asyncio.gatherを組み合わせてasyncio.gatherを組み合わせると、パフォーマンスが大幅に向上する可能性があり、合計時間は最も遅いリクエストに等しくなります。 3.カスタムヘッダー、認証、base_url、タイムアウト設定をサポートします。 4。投稿リクエストを送信してJSONデータを伝達できます。 5.同期非同期コードの混合を避けるために注意してください。プロキシサポートは、クローラーやAPI集約、その他のシナリオに適したバックエンド互換性に注意を払う必要があります。

Pythoncanbeoptimizedformemory-boundoperationsは、ヘッドゲネレーター、EfficientDataStructures、およびManagingObjectlifetimes.first、Usegeneratoratoratoratoratoratoraturatussを使用していることを確認してください

この記事の目的は、Sqlalchemyの初心者がCreate_Engineを使用したときに遭遇した「removedin20warning」警告を解決することを支援することを支援することを支援することを支援することを目的としています。この記事では、この警告の原因を詳細に説明し、特定の手順とコード例を提供して、警告と接続の問題を排除し、データベースをスムーズにクエリして操作できるようにします。

shutil.rmtree()は、ディレクトリツリー全体を再帰的に削除するPythonの関数です。指定されたフォルダーとすべてのコンテンツを削除できます。 1.基本的な使用法:shutil.rmtree(PATH)を使用してディレクトリを削除すると、FilenotFounderror、PermissionError、その他の例外を処理する必要があります。 2。実用的なアプリケーション:一時的なデータやキャッシュディレクトリなど、サブディレクトリとファイルを1回クリックして含むフォルダーをクリアできます。 3。注:削除操作は復元されません。 FilenotFounderrorは、パスが存在しない場合に投げられます。許可またはファイル職業のために失敗する可能性があります。 4.オプションのパラメーター:INGRORE_ERRORS = trueでエラーを無視できます

対応するデータベースドライバーをインストールします。 2。CONNECT()を使用してデータベースに接続します。 3.カーソルオブジェクトを作成します。 4。Execute()またはexecuteMany()を使用してSQLを実行し、パラメーター化されたクエリを使用して噴射を防ぎます。 5。Fetchall()などを使用して結果を得る。 6。COMMING()は、変更後に必要です。 7.最後に、接続を閉じるか、コンテキストマネージャーを使用して自動的に処理します。完全なプロセスにより、SQL操作が安全で効率的であることが保証されます。

Pythonは、ETLプロセスを実装するための効率的なツールです。 1。データ抽出:データベース、API、ファイル、およびその他のソースからデータを抽出できます。Pandas、Sqlalchemy、Requests、その他のライブラリを介して。 2。データ変換:パンダを使用して、クリーニング、タイプ変換、関連性、集約、その他の操作を使用して、データの品質を確保し、パフォーマンスを最適化します。 3。データの読み込み:PandasのTO_SQLメソッドまたはクラウドプラットフォームSDKを使用して、ターゲットシステムにデータを書き込み、書き込み方法とバッチ処理に注意してください。 4。ツールの推奨事項:気流、ダグスター、長官は、ログアラームと仮想環境を組み合わせて、安定性と保守性を向上させるために、プロセスのスケジューリングと管理に使用されます。

psycopg2.pool.simpleconnectionPoolを使用して、データベース接続を効果的に管理し、頻繁な接続の作成と破壊によって引き起こされるパフォーマンスオーバーヘッドを回避します。 1.接続プールを作成するときは、接続プールが正常に初期化されていることを確認するために、接続パラメーターとデータベース接続パラメーターの最小数と最大数を指定します。 2。getConn()を介して接続を取得し、putconn()を使用して、データベース操作を実行した後に接続をプールに戻します。絶えずconn.close()を呼び出すことは禁止されています。 3. SimpleConnectionPoolはスレッドセーフであり、マルチスレッド環境に適しています。 4.コンテキストマネージャーと組み合わせてコンテキストマネージャーを実装して、例外が記載されているときに接続を正しく返すことができることを確認することをお勧めします。
