1. はじめに
シナリオによっては、正弦波オーディオ データを再生するために、マイクロコントローラーの IIS などの周辺機器を使用する必要があります。この記事では、固定周波数および固定振幅の正弦波固定小数点データを生成し、学習および使用のために記録および要約する「愚かな方法」を紹介します。
2、ステップの導入
总体步骤概述:
1,使用Audition生成制定波形,并转成pcm格式;
2,写个main函数将所需要的数据读取并打印,然后运行重定向到txt中;
3,将txt中的数据复制到IIS的播放buffer中进行播放即可;
この記事では、例として、サンプリング レート 48K、振幅 -6db、周波数 1KHz の正弦波信号を使用します。
2.1 Audition を使用して指定された波形を生成し、それを PCM 形式に変換します
Auditionを開き、トーンを生成します:
新しいオーディオファイルを作成し、OKをクリックします:
波信号の周波数と振幅を設定します 開始: 波
信号の終わりの周波数と振幅を設定します:
「OK」をクリックすると、ステレオ指定された音源が作成されます準備完了:
オーディションのショートカット キー「Alt+Z」を使用して、生成された波形信号の周波数を表示します。「選択範囲のスキャン」をクリックして、左右のチャンネルの周波数が 1KHz であることを確認します。現在の浮動小数点データを固定小数点データに変換します
。 -ポイント データの場合は、ショートカット キー「Ctrl + S」を使用し、ファイルを .pcm 形式で保存し、指定したパスに保存します。
これまでに、オーディオ ソース ファイルが生成され、準備されました。
2. 必要なデータを読み取って出力する main 関数を作成し、それを txt にリダイレクトします。
主な関数コードは次のとおりです:
ここで IN_32BITPCM_FILE は生成されたばかりの pcm ファイルを使用します;
DATA_SAMPLE_LEN は 96 に設定されます。これは、1KHz の周波数周期が 1ms、48K サンプリング レートが 1ms のサンプリング ポイントの数が 48 であるためです。ステレオなので、ここをお読みください。 96 個のサンプリング ポイントを取得します。
#include <stdio.h>
#define IN_32BITPCM_FILE "-6db_1K_48KSr.pcm"
#define READ_DATA_SAMPLE_LEN 96
int main()
{
int ret = -1;
FILE *fp = NULL;
int buffer[READ_DATA_SAMPLE_LEN] = {
0};
fp = fopen(IN_32BITPCM_FILE,"rb");
if(fp == NULL) {
printf("%s: open file failed \n",__func__);
return -1;
}
fseek(fp,0,SEEK_SET);
ret = fread(buffer,sizeof(char),READ_DATA_SAMPLE_LEN*sizeof(buffer[0]),fp);
if(ret <=0 ) {
printf("%s: ERROR:read file data failed \n",__func__);
fclose(fp);
return -1;
}
for(int i=0; i< READ_DATA_SAMPLE_LEN; i++){
printf("0x%08X, ", buffer[i]);
if(((i+1)%8) == 0){
printf("\n");
}
}
fclose(fp);
return ret;
}
MINGW64 を開いて main 関数をコンパイルし、デフォルトで a.exe を生成します。
a.exe を実行し、出力結果を test.txt にリダイレクトします。
test.txt を開いて、生成された正弦波固定小数点データを表示し、必要なデータはすでにきちんと整理されています:
2.3 次に、指定した配列にデータをコピーします
備考: 生成されたデータをオーディオ再生のバッファーと一致させるために、ここでサイクル データのコピーをさらにいくつかコピーし、ループして完全なサイクルを生成するデータを格納する配列からデータをフェッチしてコピーできます。それをオーディオ再生のバッファ配列に入れることができます。
3、まとめ
この記事では、固定小数点データの正弦波を生成する愚かな方法を主に紹介しますので、参考にしてください。フォローアップでは、CORDIC アルゴリズムを使用して、さまざまな周波数、振幅、サンプリング レートの正弦波形を生成する方法を紹介します。議論や交換を歓迎します~