首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以类似Chirp的方式读取和传输Android中的wav文件

以类似Chirp的方式读取和传输Android中的wav文件
EN

Stack Overflow用户
提问于 2014-05-14 11:30:06
回答 1查看 470关注 0票数 1

我想从一个现有的wav文件中读取每个字符,并将其分配到一定的频率。

我特别想通过声音把WAV文件从一个电话传输到另一个像"Chirp“android应用程序。

为此,我需要将所有数据映射到特定的频率,并播放生成的音调,以便其他手机可以解码它并重建wav文件。

看看这个: chirp.io/tech

例如,wave文件的第一行是:

52 49 46 46 E0.

我的想法是:

5->100 2->200 4->300.

它们是在不改变数据的情况下分裂它们的一种方法吗?

我想我应该提到我的wav文件被格式化为:

代码语言:javascript
复制
static int sampleRate=44100;
static int numSample=duration*sampleRate;
long mySubChunk1Size = 16;
static short myBitsPerSample= 16;
int myFormat = 1;
static int myChannels = 1;
long myByteRate = sampleRate * myChannels * myBitsPerSample/8;
int myBlockAlign = myChannels * myBitsPerSample/8;
long myChunk2Size = generatedSnd.length* myChannels * myBitsPerSample/8;
long myChunkSize = 36 + myChunk2Size;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-14 12:30:12

你想做的方式很简单.天真。

我告诉你为什么:

  • 0x59是一个字节(小数: 89),但是你想要两个不同的声音(0x50和0x09)吗? 这似乎不是一个好主意,因为你会有2频率(用于LSB和MSB)。
  • 此外,您还需要映射文件中的所有256字节值, 从0x00到0xFF (小数点: 255)。
  • 加上,分配0x50 (小数: 80) 100赫兹和0x009 (小数: 9) 200赫兹,同样不会 对我来说很有意义。

现在,一种可能的方法是:

我将实现一个算法,比如(byte * 32) + 440,它给了我:

  • 440赫兹为0x00,为(0 * 32) + 440
  • ..。
  • 3288 Hz为0x59,为(89 * 32) + 440
  • ..。
  • 0xFF为8600 Hz,为(255 * 32) + 440。

所有字节都将被“编码”成可听频谱中的频率。

与前面提到的"Chirp“方法中使用的方法非常相似。

我不需要告诉它,0是440赫兹(或任何其他关联),算法为我做的。

此外,您可以输出(并接收)任何类型的文件。还不错。

编辑

由于媒体(声学扬声器/麦克风)仅限于低频范围(可听到的声音),所以必须使用可听的声音。

如果你使用无线电传输,那么你也可以使用高频。

因为它真的取决于建筑质量。我建议每个扬声器/麦克风联轴器都能处理一个“安全”范围。

关于可听音调的参考:frequency

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

https://stackoverflow.com/questions/23653448

复制
相关文章

相似问题

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