1

C ++でSDLを使用してボリュームをミュートするにはどうすればよいですか?
スピーカーはヘッドホンジャックソケットに接続されています。音量がミュートされていない場合、バックグラウンドノイズが聞こえますが、ミュートすると('amixer set Headphone mute'を使用して)停止します。Mix_VolumeMusic()とMix_Volume()で音量をゼロに設定して同じことを実現しようとしましたが、音楽の音量が変わるだけで、ノイズはまだ残っています。

環境:
Debian Sqeeze
パッケージ:libsdl1.2-dev
バージョン:1.2.14-6.1

4

1 に答える 1

1

libsdl.org Webサイトのドキュメントにはこれらの機能が表示されていませんが、SDLにはあなたが行っている以上のミュート機能はないと思います。APIを見ると、内部ソフトウェアミキサーを制御しているだけだと思います(PCMボリュームコントロールはSDL 1.3ウィッシュリストにあります)が、ボリュームを調整し、alsamixerでシステムボリューム設定を表示することでこれを確認できます(<Esc >終了するキー)。汚い回避策は、システムコールを使用してミキサープログラムを実行することです。#include <stdlib.h>を持って実行する必要がありますsystem("amixer set Headphone mute");。それを超えて、私は実際のミュートのためにalsaのようなものを調べて、後で簡単に置き換えることができるように独自のミュート関数を作成します。Windowsをサポートする必要がある場合は、#ifdef _WIN32/#else/#endifその中にブロックを書き込むことができます。

私はハードウェアのソフトウェアの問題を修正することを推奨していませんが、より良いサウンドカードが必要なようです。また、コンピュータのリアジャックをフロントジャックよりも使用している方が、おそらくより良いサウンドが得られます。私はいつもマザーボードに接続されている細いサウンドケーブルからたくさんのノイズを拾ってきました。

于 2011-08-09T23:27:17.390 に答える