2011-12-16 13 views
8

Estoy jugando con sonidos agudos. Me gustaría generar un archivo MP3 con una ráfaga de 1 segundo a 15Khz. ¿Hay una manera simple de hacer esto desde C o Python? No quiero usar MATLAB.Generar un archivo de sonido con un tono de 15Khz

+1

Tenga en cuenta que un tono de 15KHz puede tener muchas formas, por ejemplo sinusoidal, cuadrada, triangular, diente de sierra, etc. – dreamlax

+0

estaría muy interesado en una solución, la cual genera el mp3 directamente. Crear un archivo wave y comprimirlo con lame es una solución bastante obvia pero aburrida. Un pequeño C prog que genera un mp3 con un tono (15kHz o lo que sea) que pueda ser reproducido por cualquier decodificador sería increíble. ¿Algún frikis de archivos mp3 aquí? –

Respuesta

14

Puede usar el módulo wave de Python para crear un archivo de onda que luego puede comprimir a MP3. Para crear una onda senoidal un solo segundo 15kHz:

import math 
import wave 
import struct 

nchannels = 1 
sampwidth = 2 
framerate = 44100 
nframes = 44100 
comptype = "NONE" 
compname = "not compressed" 
amplitude = 4000 
frequency = 15000 

wav_file = wave.open('15khz_sine.wav', 'w') 
wav_file.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname)) 
for i in xrange(nframes): 
    sample = math.sin(2*math.pi*frequency*(float(i)/framerate))*amplitude/2 
    wav_file.writeframes(struct.pack('h', sample)) 
wav_file.close() 
-1

Ha intentado:

#include<dos.h> 
#include<iostream.h> 
#include<conio.h> 
main() 
{ 
    sound(500); // Frequency 
    delay(1000); // Time 
    nosound(); // Stop 
} 
+0

Esa biblioteca es una maravilla del pasado, pero ¿en qué plataformas se ejecuta hoy? –

+7

¿Cómo se actualiza? No solo prácticas anticuadas de C (valores de retorno implícitos), sino plataforma específica cuando ninguna plataforma especificada en etiquetas o preguntas ... Tampoco tiene nada que ver con la generación de MP3. – dreamlax

2

Me gustaría romper este en 2 piezas:

  1. Crear un archivo de onda usando una biblioteca de C++ (como libsndfile biblioteca)
  2. convertir el archivo de onda de mp3 usando una utilidad (como lame). Esta es una herramienta de línea de comando que también puede ser llamada desde su programa C. ver -t para convertir ola a mp3.

Una cosa a tener en cuenta es que 15KHz es una frecuencia muy alta para ser escuchado por humanos y supongo que la mayoría de los altavoces no son capaces de reproducirlo ya que está más allá de la frecuencia de corte de ellos. Así que no te sorprendas si no escuchas el resultado.

+0

+1, pero en cuanto al rango de altavoces, muchos auriculares tienen frecuencias de respuesta de hasta 20,000Hz. Si puedes oirlo es una historia diferente! – dreamlax

Cuestiones relacionadas