libwebsocketsを使用するCサーバーがあり、受信したオーディオストリームをディスク上のファイルに保存します。C libwebsocketsを使用してオーディオストリームをファイルに保存します。
は、ここに私のコードスニペットです:
#define FILENAME "/home/ubuntu/Desktop/file.wav"
FILE *received_file;
struct lws_context *Audiocontext;
static int callback_audio(
struct lws *wsi,
enum lws_callback_reasons reason,
void *user, void *in, size_t len)
{
switch (reason) {
case LWS_CALLBACK_ESTABLISHED:
{
printf("client is connected\n");
received_file = fopen(FILENAME, "w+");
if (received_file == NULL)
{
printf("Failed to open file\n");
exit(EXIT_FAILURE);
}
}
break;
case LWS_CALLBACK_RECEIVE: {
if(strcmp((char*)in,"EOS")==0)
{
printf("End of stream!\n");
fclose(received_file);
}
else
{
fwrite(in, 1, len, received_file);
}
}
}
}
は、私がメッセージ「クライアントが接続されている」ともファイルを得たが、内容は、私はそれを再生することはできませんOKではありません。私はfwrite()
を使ってストリームをファイルに保存する方法に問題があると思う。
クライアントは、wav、16Khz、monoとしてエンコードされたオーディオチャンクを送信しています。ここにクライアントからのスニペットがあります(javascriptクライアントです。フルコードはhttp://kaljurand.github.io/dictate.js/です)。
if (recorder) {
recorder.stop();
config.onEvent(MSG_STOP, 'Stopped recording');
// Push the remaining audio to the server
recorder.export16kMono(function(blob) {
socketSend(blob);
socketSend(TAG_END_OF_SENTENCE);
recorder.clear();
}, 'export16kMono');
config.onEndOfSpeech();
} else {
config.onError(ERR_AUDIO, "Recorder undefined");
}
クライアントは正常に動作していますが、私はまったく同じタスクに使用しますが、Javaサーバーを使用しています。私は誰かが私にこれらのオーディオチャンクを有効なファイルに保存する方法を教えてもらえるか分かっていただければ幸いです。
送信しようとしたファイルとディスクに書き込まれたファイルを比較できますか?私はあなたがLinux上でこのプログラムを実行していると仮定しますか? – purplepsycho
マイクからライブオーディオを送信します。クライアントには、チャンクをrawまたはwavとしてエンコードする機能があります。私はUbuntuにいる。 –
wavファイルが 'RIFF'のようなもので始まっていることを確認できますか?これを行うには、次のように入力します:' hexdump -C your_file.wav |ヘッド " – purplepsycho