これは、 nesC 言語のTestAVBoardM.ncファイルのコードです。
#define BUFFERLEN 32768
uint32_t gBuffer[BUFFERLEN] __attribute__((aligned(32)));
uint32_t gNumSamples = BUFFERLEN/4;
event void Audio.ready(result_t success)
{
call Audio.audioRecord(gBuffer,gNumSamples));
return;
}
バッファー gBuffer は、録音サンプルを格納するために使用されます。サンプルは、32 ビット ワードにパックされた 16 ビット ステレオ サンプルです。左のサンプルは下位 16 ビットにあります。右のサンプルは上位 16 ビットにあります。
私を混乱させているのは、サンプル数 gNumSamples です。私が理解しているように、gBuffer[i] は 32 ビット ワード (左チャネルの 16 ビット + 右チャネルの 16 ビット) であるため、gNumSamples は BUFFERLEN である必要があります。私は正しいですか?(私は変更gNumSamples = BUFFERLEN
しましたが、うまくいきませんでした)。
ご協力いただきありがとうございます。
gBuffer の使用方法は次のとおりです。
command result_t Audio.audioRecord(uint32_t *buffer, uint32_t numSamples){
uint32_t *pBuf;
uint32_t bufpos;
bool initPlay;
atomic{
initPlay = gInitPlay;
}
if(initPlay == TRUE){
//gate the acceptance of a record command until we signal audio.ready();
return FAIL;
}
atomic{
pBuf = gRxBuffer;
bufpos = gRxBufferPos;
}
if( (bufpos != 0) || (pBuf != NULL)){
//gate acceptance due to ongoing record command
return FAIL;
}
atomic{
gRxBuffer = buffer;
gRxBufferPos = 0;
gRxNumBytes = numSamples * 4;
}
call BulkTxRx.BulkReceive((uint8_t *)buffer, ((numSamples*4) > 8188)? 8188: (numSamples*4));
return SUCCESS;
}