首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >音频通过CAN FD进入耳机

音频通过CAN FD进入耳机
EN

Stack Overflow用户
提问于 2022-01-12 14:52:56
回答 1查看 87关注 0票数 0

我试图记录音频使用12位分辨率模数转换器,采取样本缓冲区,并通过CAN FD发送到另一个设备,该设备获取该音频的样本,并创建一个.wav并播放它。问题是,我看到通过CAN FD发送给另一个设备的麦克风的数据,但我无法正确地将这些数据转换为.wav文件,并通过麦克风听到我说的话。我只听到嘟嘟声。

我正在创建一个新的.wav,每4罐FD消息,以进行某种形式的实时通信,并减少延迟,但我认为这是不可能的,如果我认为这是正确的方式。

在这个线程中,我接受CAN发送的消息,并将其连接到一个缓冲区中,以便在.wav文件中引入它。我试过更大的缓冲,但它不会改变结果。我怎么能从CAN FD中获取数据并听到它呢?

澄清:我知道使用CAN FD传输音频不是正确的方式,但它是一个主项目。

代码语言:javascript
运行
复制
struct canfd_frame frame;
 CAN_MSG msg;
    int trama_can[72];
    int nbytes;
    while (status_libreria == 0)
        ;
    unsigned char buffer[256];
    // FILE * fPtr;
    int i=0,x=0;
    //fPtr = fopen("Test.txt", "w");
    while (1) {
        do {
            nbytes = read(s, &frame, sizeof(struct canfd_frame));
        } while (nbytes == 0);
        msg.id.ext = frame.can_id;
        msg.dlc = frame.len;

        if (msg.dlc > 8)
            msg.dlc = 8; //Protecci�n hasta adaptar AC3LIB a CANFD

        Numas_memcpy(&(msg.data.bdata), &(frame.data), msg.dlc);

        can_frame_2_ac3lib(&msg, BUS_VERTICAL);
        for(x=0;x<64;x++) buffer[i*64+x] = frame.data[x];
        printf("%d \r\n",frame.data[x]);
        printf("i:%d \r\n",i);
        // Copiar datos a fichero.wav y reproducirlo simultaneamente
        if (i == 3) {
            printf("Datos IN\r\n");
            write_wav("prueba.wav",256 , (short int *)buffer, 16000);

            //fwrite(buffer,1,sizeof(buffer),fPtr);
            //fclose(fPtr);
            system("aplay prueba.wav -f cd");
            i = 0;
            system("rm prueba.wav");
        }
        i++;
    }

所记录的音频文件的32个第一个字节

在图片中,如你所见,数据正在被记录下来。此外,这些数据与ADC中的数据相同,但当我播放它时,我只听到噪音。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 17:10:58

首先简化问题。确保您可以首先以低速率将已知数据从一端传输到另一端。我相信下面的建议听起来太琐碎了。但是,除非你完全相信你能理解这一切,否则我预测你还会有很多挣扎。

慢一点-每秒一帧,甚至更慢。

  • 学会将一个0x55字节从一端发送到另一端,并在接收端进行验证。
  • 学会在一个帧中发送几个0x55并进行验证。
  • 学习发送0x12345678 -验证它在另一端以正确的顺序结束。
  • 学会发送柜台。检查它的接收器,确保你没有丢失任何数据。

现在再做一次,但是速度快了10倍。

继续,直到您可以发送一个计数器,以10倍的速率,您需要的音频,而不删除任何帧,分钟,然后几个小时。

强调系统的其余部分,以确保它仍然在压力下工作。

只有现在,你才能开始学习如何发送音频。

相信我,你会学到很多东西!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70683679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档