我目前正在尝试使用Android实现一些代码,以检测何时通过手机的麦克风播放多个特定的音频范围.我已经使用AudioRecord类设置了类:
int channel_config = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int format = AudioFormat.ENCODING_PCM_16BIT;
int sampleSize = 8000;
int bufferSize = AudioRecord.getMinBufferSize(sampleSize, channel_config, format);
AudioRecord audioInput = new AudioRecord(AudioSource.MIC, sampleSize, channel_config, format, bufferSize);
Run Code Online (Sandbox Code Playgroud)
然后读入音频:
short[] audioBuffer = new short[bufferSize];
audioInput.startRecording();
audioInput.read(audioBuffer, 0, bufferSize);
Run Code Online (Sandbox Code Playgroud)
执行FFT是我陷入困境的地方,因为我在这方面的经验很少.我一直在尝试使用这个类:
然后我发送以下值:
Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i<bufferSize; i++)
{
fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);
Run Code Online (Sandbox Code Playgroud)
这可能很容易让我误解了这个课程是如何工作的,但是返回的值跳到了整个地方,即使在沉默中也不代表一致的频率.是否有人知道执行此任务的方法,或者我是否过于复杂化以尝试仅抓取少量频率范围而不是将其绘制为图形表示?
我家里有蚊子问题.这通常不会涉及程序员的社区; 然而,我看到一些设备声称通过播放17Khz音调来阻止这些讨厌的生物.我想用我的笔记本电脑做这件事.
一种方法是创建一个具有单一固定频率音调的MP3(这可以通过大胆来轻松完成),用python库打开它并重复播放.
第二种是使用计算机内置扬声器播放声音.我正在寻找类似于QBasic Sound的东西:
SOUND 17000, 100
Run Code Online (Sandbox Code Playgroud)
那有一个python库吗?
我想将声音的音高绘制成图形.
目前我可以绘制幅度.下图是由返回的数据创建的getUnscaledAmplitude():

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
byte[] bytes = new byte[(int) (audioInputStream.getFrameLength()) * (audioInputStream.getFormat().getFrameSize())];
audioInputStream.read(bytes);
// Get amplitude values for each audio channel in an array.
graphData = type.getUnscaledAmplitude(bytes, 1);
public int[][] getUnscaledAmplitude(byte[] eightBitByteArray, int nbChannels)
{
int[][] toReturn = new int[nbChannels][eightBitByteArray.length / (2 * nbChannels)];
int index = 0;
for (int audioByte = 0; audioByte < eightBitByteArray.length;)
{
for (int channel = 0; channel < nbChannels; channel++)
{
// Do the byte to sample conversion. …Run Code Online (Sandbox Code Playgroud) 确定什么即时试图做的是一种音频处理软件,频率会起到足够长的时间(几毫秒)我知道我得到了一个积极的匹配,可以检测常见频率.我知道我需要使用FFT或东西simiral但在数学这个领域我吸,我没有在网上搜索,但没找不到只能做这样的代码.
我试图获得的目标是使自己成为通过声音发送数据的自定义协议,每秒需要非常低的比特率(5-10bps),但我在传输端也非常有限,因此接收软件需要能够自定义(不能使用实际的硬件/软件调制解调器)我也希望这只是软件(除声卡外没有其他硬件)
非常感谢您的帮助.
鉴于以下列表
['Jellicle', 'Cats', 'are', 'black', 'and', 'white,', 'Jellicle', 'Cats',
'are', 'rather', 'small;', 'Jellicle', 'Cats', 'are', 'merry', 'and',
'bright,', 'And', 'pleasant', 'to', 'hear', 'when', 'they', 'caterwaul.',
'Jellicle', 'Cats', 'have', 'cheerful', 'faces,', 'Jellicle', 'Cats',
'have', 'bright', 'black', 'eyes;', 'They', 'like', 'to', 'practise',
'their', 'airs', 'and', 'graces', 'And', 'wait', 'for', 'the', 'Jellicle',
'Moon', 'to', 'rise.', '']
Run Code Online (Sandbox Code Playgroud)
我试图计算每个单词出现的次数并显示前3个.
但是我只想找到第一个字母大写的前三个,并忽略所有没有首字母大写的单词.
我相信有比这更好的方法,但我的想法是做以下事情:
我是R.的新手.我需要生成一个具有累积频率和相对频率的简单频率表(如书中).
所以我想从一些简单的数据生成
> x
[1] 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 12 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10
[36] 12 15 19 20 22 20 19 19 19
Run Code Online (Sandbox Code Playgroud)
像这样的表:
frequency cumulative relative
(9.99,11.7] 2 2 0.04545455
(11.7,13.4] 2 4 0.04545455
(13.4,15.1] 1 5 0.02272727
(15.1,16.9] 10 15 0.22727273
(16.9,18.6] 22 37 0.50000000
(18.6,20.3] 6 43 0.13636364
(20.3,22] 1 …Run Code Online (Sandbox Code Playgroud) 我有一个mydf大约2500行的data.frame .这些行对应于colum 1中的69个对象类mydf$V1,我想计算每个对象类有多少行.我可以通过以下方式获得这些类的因子:
objectclasses = unique(factor(mydf$V1, exclude="1"));
Run Code Online (Sandbox Code Playgroud)
什么是计算每个对象类的行的简洁R方法?如果这是任何其他语言,我将遍历一个带循环的数组并保持计数,但我是R编程的新手,并且我正在尝试利用R的矢量化操作.
我正在研究一个Java程序,我真的需要能够以一定的频率和持续时间播放声音,类似于c#方法System.Beep,我知道如何在C#中使用它,但我找不到一种在Java中执行此操作的方法.是否有一些等效或其他方式来做到这一点?
using System;
class Program
{
static void Main()
{
// The official music of Dot Net Perls.
for (int i = 37; i <= 32767; i += 200)
{
Console.Beep(i, 100);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图使用O(n)复杂度的算法在任何给定文本中找到每个符号的频率.我的算法看起来像:
s = len(text)
P = 1.0/s
freqs = {}
for char in text:
try:
freqs[char]+=P
except:
freqs[char]=P
Run Code Online (Sandbox Code Playgroud)
但我怀疑这个字典方法足够快,因为它取决于字典方法的底层实现.这是最快的方法吗?
更新:如果使用集合和整数,速度不会增加.这是因为该算法已经具有O(n)复杂度,因此不可能实现必要的加速.
例如,1MB文本的结果:
without collections:
real 0m0.695s
with collections:
real 0m0.625s
Run Code Online (Sandbox Code Playgroud) 我有数据作为浮动列表,我想将其绘制为直方图.Hist()函数完美地完成了绘制绝对直方图的工作.但是,我无法弄清楚如何以相对频率格式表示它 - 我希望将它作为一个分数或理想情况下作为y轴上的百分比.
这是代码:
fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, patches = ax.hist(mydata, bins=100, normed=1, cumulative=0)
ax.set_xlabel('Bins', size=20)
ax.set_ylabel('Frequency', size=20)
ax.legend
plt.show()
Run Code Online (Sandbox Code Playgroud)
我认为normed = 1参数会做到这一点,但它会给出分数太高而有时大于1.它们似乎也依赖于bin大小,好像它们没有被bin大小或其他东西标准化.然而,当我设置cumulative = 1时,很好地总结为1.那么,捕获的位置在哪里?顺便说一句,当我将相同的数据输入Origin并绘制它时,它给出了完全正确的分数.谢谢!