标签: waveform

在SDL回调函数中以特定频率播放波形

我有一个长64个样本的波形.如果采样率为44100 hz,我该如何播放(循环)此波形以使其播放任意频率?

频率=样本中的采样率/波形持续时间

因此频率应为689hz(44100/64).如果我想要它,65.41hz(C-2),我必须这样做:

65.41 = 44100/x

求解x得到aprox.674.208.因此,我需要弄清楚播放波形的速度,以获得此频率.所以我们可以解决这个等式:

64*x = 674.208

得到大约10.5.因此波形需要以其原始速度的10.5%播放.

这是我的代码:

double smp_index = 0;
double freq = .105;

void callback(void *data, Uint8 *buf, int len){
    int i;
    s8 *out;
    out = (s8*) buf;
    if(smp_index < waveform_length){
        for(i = 0; i < len; i ++){
            out[i] = smpdata[(int)smp_index];
            smp_index +=freq;
            if(smp_index >= waveform_length)
                smp_index = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此产生的音频应该是关于音符C-2,但它更多的是D-2.是演员

(int)smp_index
Run Code Online (Sandbox Code Playgroud)

造成这个问题?我看不到任何其他方法来实现这个目标......

c audio sdl waveform callback

7
推荐指数
1
解决办法
1482
查看次数

减少谐波,在Java中产生纯音

我正在尝试用Java开发一个静态方法来生成纯音.

在开始时它似乎很容易,但是当我尝试将双阵列写入扬声器时,我欣赏太多的谐波.

我用频谱分析仪(声压计)测试它,然后我也在图形中绘制了数组结果.当我完成它时,我已经看到了问题:

这是波形,它已经中断了.我想平滑这个数组,但我不知道该怎么做.

这是代码:

/**
 * Genera un tono puro.
 * @param bufferSize Tamaño del buffer.
 * @param fs Frecuencia de muestreo.
 * @param f0 Frecuencia central. 
 * @return El tono puro.
 */
public static double[] generateTone(int bufferSize, int fs, int f0) {
    double[] tone = new double[bufferSize]; // Tono
    double angle; // Ángulo del tono

    // Sólo hace falta recorrer la mitad del array, ya que hay simetría:
    for (int i = 0; i < tone.length / 2; …
Run Code Online (Sandbox Code Playgroud)

java waveform sound-synthesis

7
推荐指数
1
解决办法
273
查看次数

如何找到信号周期(自相关 vs 快速傅立叶变换 vs 功率谱密度)?

假设有人想找出给定正弦波信号的周期。从我在网上阅读的内容来看,这两种主要方法似乎采用了傅立叶分析或自相关。我正在尝试使用 python 自动化该过程,我的用例是将此概念应用于来自围绕恒星运行的模拟物体的位置(或速度或加速度)时间序列的类似信号。

为了简单的例子,考虑x = sin(t)for 0 ? t ? 10 pi

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

## sample data
t = np.linspace(0, 10 * np.pi, 100)
x = np.sin(t)
fig, ax = plt.subplots()
ax.plot(t, x, color='b', marker='o')
ax.grid(color='k', alpha=0.3, linestyle=':')
plt.show()
plt.close(fig)
Run Code Online (Sandbox Code Playgroud)

示例正弦波

给定形式x = a sin(b(t+c)) + d为 的正弦波,正弦波的周期为2 * pi / b。由于b=1(或通过目视检查),我们的正弦波的周期是2 * pi。我可以根据此基线检查从其他方法获得的结果。

尝试 1:自相关

据我了解(如果我错了,请纠正我),相关性可用于查看一个信号是否是另一个信号的时间滞后副本(类似于余弦和正弦因相位差而不同)。因此,自相关是针对自身测试信号,以测量时滞重复所述信号的时间。使用此处发布示例 …

python signals waveform fft time-series

7
推荐指数
1
解决办法
3583
查看次数

使用C#显示音频波形

我已经在Stackoverflow和谷歌搜索过,但还没找到我想要的东西.
到目前为止,我得到了音频原始数据(WAV文件),我想要将其可视化.

        private void Form1_Load(object sender, EventArgs e)
    {
        FileStream fs = new FileStream("D:\\tada.wav", FileMode.Open);
        BinaryReader reader = new BinaryReader(fs);
        char[] data = new char[4];
        long fsize;
        long wfxSize;
        long dataSize;
        WaveFormatEx wfx;

        //RIFF
        reader.Read(data, 0, 4);

        fsize = reader.ReadInt32();

        //WAVE
        reader.Read(data, 0, 4);

        //FMT
        reader.Read(data, 0, 4);
        wfxSize = reader.ReadInt32();

        byte[] wfxBuffer = new byte[wfxSize];
        reader.Read(wfxBuffer, 0, (int)wfxSize);
        wfx = new WaveFormatEx(wfxBuffer);

        //DATA
        reader.Read(data, 0, 4);
        dataSize = reader.ReadInt32();
        byte[] dataBuff = new byte[dataSize];
        reader.Read(dataBuff, 0, (int)dataSize);
        reader.Close();

        //Visualize …
Run Code Online (Sandbox Code Playgroud)

c# audio waveform

6
推荐指数
2
解决办法
2万
查看次数

编写软件来分辨声音的来源(定向收听)

我一直对此感到好奇,所以我想在这里发帖我可以得到一些好的答案.

到目前为止我所知道的:

人类可以用他们的两只耳朵来获取听起来"听起来像"的声音,以及它们来自哪里.音高是我们听到的音符,类似人声的音高有多种音高(不是纯音).

我想知道的是什么:

我如何编写一个可以知道声音来自何处的程序?从理论的角度来看,我需要两个麦克风,然后我会记录进入麦克风的声音数据并存储音频数据,以便将一瞬间的音频数据放入像[streamA,streamB]这样的元组中.

我觉得可能有一种公式/数学方法可以根据声音的来源进行计算.我也觉得可以获取流数据并训练学习者(给它采样音频并告诉它来自音频的位置)并让它以这种方式对传入的音频进行分类.

这样做的最佳方式是什么?是否有足够的资源可以从中学到更多关于这个主题的知识?

编辑:

例:

          front
Run Code Online (Sandbox Code Playgroud)

左(麦克风)x ======== x(麦克风)对

          back

                            x (sound source should return "back" or "right" or "back right")
Run Code Online (Sandbox Code Playgroud)

我想写一个程序,它可以返回前/后左/右声音听到的大部分声音.根据我的理解,设置两个指向"前进"的麦克风应该很简单.基于此,我试图找出一种方法,我们可以对声音进行三角测量,并知道与麦克风相关的来源.

audio speech-recognition waveform wav

6
推荐指数
1
解决办法
4793
查看次数

从youtube视频生成音频波形

有没有人知道是否可以使用Javascript从youtube播放器中播放的视频中呈现音频波形?谢谢!

javascript youtube audio waveform

6
推荐指数
1
解决办法
2350
查看次数

我可以在Android应用程序中测量声音的距离吗?

这次我有很多问题,虽然它们都与同样的问题有关:我想在Android中构建一个基本的声纳,并且不知道如何做这样的事情.

  • 是否可以合理地运作?
  • 比较波形的最佳方法(在移动应用程序中有意义)是什么?
  • 我是否可以可靠地测量在小型机箱(例如房间)中发送和接收给定波形之间的延迟?
  • 是否有任何方法(在移动应用程序中有意义)丢弃由不平坦表面(例如,打开门)产生的噪音?

只是想在这里定位,因为我对移动应用程序中的声音处理真的很陌生.提前致谢!

android waveform audio-processing

6
推荐指数
0
解决办法
378
查看次数

读磁性墨水(MICR)

我需要能够读取由磁性墨水中创建的任意形状产生的波形.如何以编程方式模拟这个?

我对OCR 感兴趣.根据磁性墨水字符识别,并假设您有E13B字体和渲染到JPG/PNG上的字符:

纸平面中的墨水首先被磁化.然后字符通过MICR读头,类似于录音机的播放头的设备.当每个角色经过头部时,它会产生一个独特的波形,系统可以很容易地识别出来.

任何编程语言的解决方案的任何指导将不胜感激.

javascript waveform objective-c magnetometer

6
推荐指数
1
解决办法
289
查看次数

如何使用 Python 生成正弦波?

我正在尝试在给定的持续时间内生成给定频率的正弦波,然后将其写入 .wav 文件。我正在使用 numpy 的 sin 函数和 scipy 的 wavfile 函数。我听到一种奇怪的声音,这绝对不是正弦波。

import numpy as np
from scipy.io import wavfile

fs = 44100

f = int(raw_input("Enter fundamental frequency: "))
t = float(raw_input("Enter duration of signal (in seconds): "))

samples = np.arange(t * fs)

signal = np.sin(2 * np.pi * f * samples)

signal *= 32767

signal = np.int16(signal)

wavfile.write(str(raw_input("Name your audio: ")), fs, signal)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。我是否对正弦波或其他东西做出了一些根本不正确的假设?

python trigonometry waveform numpy scipy

6
推荐指数
2
解决办法
2万
查看次数

Telegram Bot API:缺少语音消息音频频谱图。一个错误?

我正在开发一个 Telegram 机器人,我有一个关于发送语音(音频)消息的sendvoice API的问题。

我推送一个从 MP3 源文件转换而来的 OGG 文件,使用 ffmpeg 进行转换,命令如下:

$ ffmpeg -loglevel panic -i \
    /path/to/la_piattaforma_telegram_è_perfetta.mp3 \
    -c:a libopus -compression_level 10 -frame_duration 60 -vbr on -application voip \
    /path/to/la_piattaforma_telegram_è_perfetta.ogg -y
Run Code Online (Sandbox Code Playgroud)

顺便说一句,MIME 类型显示正确:

$ file --mime-type -b \ 
/path/to/la_piattaforma_telegram_è_perfetta.ogg
audio/ogg
Run Code Online (Sandbox Code Playgroud)

音频文件按预期正确播放,但我遇到的(次要)问题是 Telegram 客户端(桌面/安卓/任何)不显示“波形”(音频频谱图,如下图的蓝色小部件所示),而是将波形可视化为单条线。

关于如何显示波形图形的任何想法?是否需要任何特定的 OPUS 格式才能实现良好的可视化?

在此处输入图片说明

$ mediainfo /path/to/la_piattaforma_telegram_è_perfetta.ogg
General
Complete name                            : /path/to/la_piattaforma_telegram_è_perfetta.ogg
Format                                   : Ogg
File size                                : 5.37 KiB
Duration                                 : 2 s 79 ms
Overall bit rate                         : 21.2 kb/s

Audio …
Run Code Online (Sandbox Code Playgroud)

api waveform bots ogg telegram

6
推荐指数
1
解决办法
996
查看次数