- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找到所演奏的单一乐器的和弦,我怎样才能找到它
private AnalyzedSound getFrequency() {
//audioData has the audio array of recored.
elementsRead =
audioData.getElements(audioDataAnalyzis,0,audioDataSize);
double loudness = 0.0;
for(int i=0; i<elementsRead; ++i)
loudness+=Math.abs(audioDataAnalyzis[i]);
//loudness of the data is divided by the elementsRead
loudness/=elementsRead;
// Check loudness first - it's root of all evil. loudnessThreshold = 30.0
if(loudness<loudnessThreshold)
return new AnalyzedSound(loudness,ReadingType.TOO_QUIET);
//FFT computation analyzed data is in audioDataAnalyzis
computeAutocorrelation();
//chopOffEdges(0.2);
double maximum=0;
for(int i=1; i<elementsRead; ++i)
maximum = Math.max(audioDataAnalyzis[i], maximum);
int lastStart = -1;
wavelengths = 0;
boolean passedZero = true;
for(int i=0; i<elementsRead; ++i) {
if(audioDataAnalyzis[i]*audioDataAnalyzis[i+1] <=0) passedZero = true;
if(passedZero && audioDataAnalyzis[i] > MPM*maximum &&
audioDataAnalyzis[i] > audioDataAnalyzis[i+1]) {
if(lastStart != -1)
wavelength[wavelengths++]=i-lastStart;
lastStart=i; passedZero = false;
maximum = audioDataAnalyzis[i];
}
}
if(wavelengths <2)
return new AnalyzedSound(loudness,ReadingType.ZERO_SAMPLES);
removeFalseSamples();
double mean = getMeanWavelength(), stdv=getStDevOnWavelength();
double calculatedFrequency = (double)AUDIO_SAMPLING_RATE/mean;
//Log.d(TAG, "MEAN: " + mean + " STDV: " + stdv);
//Log.d(TAG, "Frequency:" + calculatedFrequency);
if(stdv >= maxStDevOfMeanFrequency)
return new AnalyzedSound(loudness,ReadingType.BIG_VARIANCE);
else if(calculatedFrequency>MaxPossibleFrequency)
return new AnalyzedSound(loudness,ReadingType.BIG_FREQUENCY);
else
return new AnalyzedSound(loudness, calculatedFrequency);
}
但我无法找到平均值。该代码对于实时录音工作正常,但我想分析保存的 wav 文件。我无法正确获得平均值。如何分割音频数据并作为输入
最佳答案
您似乎想要实现的是复调音高检测。这是一个困难的过程,充其量只是一个近似的过程,在一般情况下很难发挥作用。
您将面临的根本问题是谐波在任何真实乐器声音上的叠加。从根本上讲,协和音之所以有效,是因为和弦的组成音符中的和声是对齐的。这些可能会导致频谱峰值的频率不是和弦中音符之一的基音。
您需要处理的其他问题是乐器的频谱峰值不是其基本的、在音符开始时的打击声音 - 其频谱看起来更像噪音。
很可能需要一种统计方法来取消音符的叠加,可能需要对相关乐器的频谱特征有一些先验知识。
/FFT computation analyzed data is in audioDataAnalyzis
computeAutocorrelation();
我对这个评论有点困惑。自相关不是 FFT。一般来说,自相关被认为是现实世界音频信号频率检测的糟糕算法选择。
对于复调音高检测,您可能最好使用 FFT 方法 - 然而 - 这也不是特别简单。
最后,针对这个问题空间进行了大量研究 - 通常是在音频特征提取的背景下进行的。我建议看看Sonic Visualiser - 存在开源音调分析插件。
关于java - 如何在Android中查找单个乐器的和弦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22196101/
当用户更改参数或预设时,我如何/何时实际更新仪器? AUInstrumentBase 中没有ParameterUpdated 或PresetSelected 类型的方法/回调 最佳答案 相关机制是 A
我已经粘合了这个小型 Java 程序:我有 8 个音调(C、D、E、...、A、B、C),因此我可以使用一架穷人的钢琴。 package net.coderodde.music; import jav
我在使用 AVAudioSequencer(iOS 12.1.4、Swift 4.2、Xcode 10.1)通过 MIDI 控制第三方 AUv3 乐器时遇到问题,非常感谢您的帮助。 我目前在做什么:
我正在使用 MPICH2 1.4 构建一个 Raspberry Pi2 集群(又名 bramble)。 我还有一个 Launchpad,它是一 block 包含 64 个以上按钮的板,每个按钮可以亮起
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
示例:如果我想在我即将自制的 VST 乐器中播放一个声音,并且音序器中的这个音符有 15000 个样本长,并且该音符被 processEvents 设置为 ON,则 processReplace 函数
我是一名优秀的程序员,十分优秀!