- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对我所做的有点困惑..据我所知,java,尤其是 DataOutputStream 以 Big endian 写入值。
我正在编写一个小信号发生器并且必须以小端存储文件。到目前为止没问题,只需交换字节即可。
writeShort()
也表示“先写高字节”。
因此,例如十进制“2”通常存储为:
00 02 (big endian)
02 00 (little endian) is what I need.
所以我交换字节:
public static short swap (short value)
{
int b1 = value & 0xff;
int b2 = (value >> 8) & 0xff;
return (short) (b1 << 8 | b2 << 0);
}
然后写下短句:
dos.writeShort(swap(x[t]));
十六进制编辑器以应有的格式显示文件:02 00
当我现在尝试打开生成的音频文件时,我听不到任何声音。 (大胆的原始数据导入和采样率等设置都是正确的)。
我删除了字节交换,得到一个文件:00 02
,这是大端。
我再次打开 audacity,使用相同的配置,我听到了提示音。明确地说我配置了小端!
我将文件复制到 Windows(我在 Mac 上工作)并在 Cool Edit 2000 中打开文件,再次选择 16khz、16 位无符号 pcm 和小端(16 位 LSB、MSB)。我又听到了提示音,选择 big endian nothing。
我的失败在哪里?有些事情让我感到困惑,因为这不应该像我描述的那样工作..
生成音调:
// x(t) = A*cos (2*pi * f * t + phi)
//
if(null != dos)
{
double sampPeriod = 1.0/16000;
short x[] = new short[16000]; // 16k samples for 1 second
for(int t=0; t < x.length; t++)
{
double time = t * sampPeriod;
x[t] = (short) (amplitude * Math.sin(2.0*Math.PI*frequenz*time+phase));
}
for(int t=0; t < x.length; t++)
{
try {
dos.writeShort(x[t]);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2013 年 2 月 4 日下午 2:16 编辑:我正在四处阅读,假设我理解的某些东西是失败的,我在维基百科上找到了以下图片:
在下一篇文章中查看问题的答案。
最佳答案
好的伙计们和所有对这个问题感兴趣的人:
失败与小端或大端无关。我从 LE 和 BE 了解到的一切都是正确的。 (但不是最后关于读取权限的假设,这在我搜索任何解释时欺骗了我的思想..)
失败与信号的幅度有关。
如果振幅太低 - 音量本身(通过振幅产生)太低。所以什么也听不见。将写入的大端文件解释为小端使得文件中的每个短样本都变得更大(回到 zch 的评论:00 02 被解释为小端时是 512)。
这在当时产生了较高的采样值,导致我听到了一个东西。
通过设置更高的振幅和正确地将字节交换为小字节序,我可以再次听到声音。所以主要的失败与字节序无关。
zch 的评论让我一遍又一遍地沉思,导致在 Windows 上读取一些值并看到本地 LE 解释与 zch 所说的相同。这让我找到了振幅点,现在我找到了问题所在。希望没有其他人会犯这种愚蠢的错误,或者将来会找到这篇文章并知道 :-)
关于java - writeShort in little Endian : hex shows big, 但打开只适用于 le,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15760938/
我有一个扩展程序,我已经拆掉了裸机,它使自己处于不正确的状态,当它折叠时它会说“显示更少”。 这有两种情况 我使用“显示更多”展开扩展,然后离开屏幕。我打开另一个应用程序,然后返回到扩展程序。扩展的扩
为什么这些不相等? show $ if someCondition then someInt else some double 和 if someCondition then show someInt
下面给出的代码可以编译,ok。 data Car p q r = Car {company :: p , model :: q
是否可以在表结构中的“显示 0 到 0 个条目中的 0 个条目”旁边显示“显示条目”下拉列表。我想在底部显示“显示条目”下拉列表以及分页并显示 0 到 0 个条目,共 0 个条目。 提前致谢!!! 图
我不明白当你这样做一连串 .show() 时会发生什么。我也没有编写这段代码,也不知道如何弄清楚这里发生了什么。因此就有了这个问题。 // Remove favorite category
$(document).ready(function(){ $('html').addClass('js'); var contactForm = {
因此,在实现上一个问题的 jQuery 代码后,我注意到以下内容,每当人们添加位于显示较少/显示更多菜单中的产品时,系统会刷新页面,因为它会重新计算价格,因此也会刷新页面。但是当发生这种情况时,菜单会
我已经在 Windows 上设置了 mongodb 64bits。我成功运行了服务器和客户端。 但是当我输入时: show dbs 输出是 local 0.000GB 为什么? show dbs 应
正如标题所说,我有兴趣使用 Show a在我有 Show (a,b) 的情况下. GADT 很容易出现这个问题,如下所示: data PairOrNot a where Pair :: (b,c)
通常 julia> Base.show(io::IO, a::Int) = print(io, "xx") show (generic function with 98 methods) julia>
通常 julia> Base.show(io::IO, a::Int) = print(io, "xx") show (generic function with 98 methods) julia>
我找不到关于 Readline 选项 show-all-if-ambiguous 和 show-all-if-unmodified 之间区别的明确解释,以及是否它们影响不同的事物或相互排斥。关于这个主
我是 BeautifulSoup 的新手,我遇到了一些我不明白的问题,我认为这个问题可能尚未得到解答,但在这种情况下,我找到的答案都没有帮助我。 我需要访问 div 的内部以检索网站的词汇表条目,但是
我已经为 iOS 10 实现了新的小部件,并使用以下代码为其设置高度: @available(iOSApplicationExtension 10.0, *) func widgetActiveDis
克隆远程 git 存储库并发出 git show --show-signature 后,它说签名是好的。然后我更改了一些文件并测试了相同的命令,它仍然说签名是好的。 上面的命令到底检查了什么?验证克隆
我陷入了这个问题,而且我对 Haskell 很陌生,我试图用以下代码完成第一个欧拉问题: main = putStrLn . show . sum $ [3,6..1000]:[5,10..1000]
我有一个独立的 Android 和 iOS 应用程序。 目前正在 Android 上测试推送通知。 我已经使用以下通知键设置了我的 app.json "notification":{ "i
我所说的示例:http://jsfiddle.net/bsnxp/1/ 如果你检查源 .show().clone() display 是 inline-block (它应该是什么)并且 .clone(
我正在使用下面的 jQuery 代码来显示/隐藏网页上的额外文本 jQuery.fn.shorten = function(settings) { var config = { showC
我有一个带有 ng-show 的 div。这个 div 是我创建的自定义指令的包装器。 HTML JS function myDirective() { function doS
我是一名优秀的程序员,十分优秀!