私が理解したように、入力は/dev/dsp
8ビット符号なしPCM信号/文字ストリームでなければなりません。
しかし、
$ cat a.c
#include <stdio.h>
#include <math.h>
int
main(){
uint32_t t;
uint8_t out;
for(t=0;t<8000;++t){
out=(sin((double)t/8000*2*M_PI)+1)/2*0xff;
putchar(out);
//fprintf(stderr,"%d\n",out);
}
return 0;
}
$ gcc a.c;./a >/dev/dsp
420242024に似た周波数変調(たとえば、「高→低→高→低→高」周波数)で1秒のサウンドを出力します。私が望む出力はシングルサイクルの1Hz周波数ですが、私の耳には聞こえません。どんな音も聞くことができるのは本当に驚くべきことです。
私が聞いていることを説明するために考えることができる唯一のものは、/dev/dsp
特別なファイルが次のファイルに出力されるかどうかです。パルス密度変調。
。
パルスは、信号の導関数が最も高いまたは低いときにカチッという音(高周波から方形波のように聞こえる音)を出すため、信号の最高点と最低点でより高い周波数を持ち、最も低い周波数を持ちます。
ハードコアパンクロック/テクノ音楽を聴きたい場合は、Thatを使用しout=t*((t>>9|t>>13)&25&t>>6);
て削除してくださいt<8000
。確かにそれは私のスピーカーに正しい出力を提供しますが、ほとんどの方形波が変調後に基本的に同じように聞こえるのは偶然の一致です(家庭)。
0xff
しかし、出力または定数を出力すると、0x80
予想されるサイレントが得られます。 (クリックを使用しないと、距離に応じて0x80
最後に大きなクリック音が聞こえます0x80
。)... ..だからパルス密度変調は答えます。
それで何が起こりましたか?これは、低周波を処理できないスピーカーの欠陥(YouTubeなどの一般的な周波数音)の信号ですか?シングルサイクル1Hz信号を出力するには/dev/dsp
?
答え1
長い間待ってからもう一度見てみると、すべてが大丈夫でした。私は単一ビットの変換を聞くことができることを確認するためにそのout
変数をout=0x80+t%2;
に置き換えました。これはオリジナルとまったく同じボリュームですが、より高い周波数です。したがって、実際にオーディオレベルの変換音はクリックで聞こえます。精度が8ビットにすぎないからです。