2010-09-09 7 views
0

J'ai une oscillation: pour chaque instant t , j'ai un ensemble de échantillons.Jouer le son qu'une oscillation/vibration ferait

J'ai besoin de jouer le son de cette oscillation (sortie aux haut-parleurs).

La solution multiplateforme C++ (ou Qt) est préférée, la solution pour Windows est également bonne.

Et s'il vous plaît me aider à améliorer la question, si vous savez comment ...

+0

Sinusoïdale? http://en.wikipedia.org/wiki/Sine_wave –

+0

J'ajoute 2 oscillations sinusoïdales ou plus, et il en résulte des oscillations non sinusoïdales –

+1

On dirait que vous avez le son dans un format grossièrement pcm (ou vous pouvez l'obtenir là assez facilement) tant qu'il y a un intervalle constant dt entre tes t. Une fois qu'il est au format pcm, alors vous convertissez en wav et pouvez le jouer avec beaucoup de bibliothèques là-bas (portaudio par exemple). Vous pourriez avoir des problèmes si le taux d'échantillonnage (1/dt essentiellement) n'est pas un bon nombre. –

Répondre

0

Voici C++/code Qt:

#include<math.h> 
#include<QBuffer> 
#include<QAudioFormat> 
#include<QAudioOutput> 
... 
QAudioFormat format; 
format.setChannels(1); 
format.setFrequency(22050); 
format.setSampleSize(16); 
format.setCodec("audio/pcm"); 
format.setByteOrder(QAudioFormat::LittleEndian); 
format.setSampleType(QAudioFormat::SignedInt); 
QAudioOutput* output=new QAudioOutput(format); 
QBuffer* buffer=new QBuffer(); 
QByteArray data; 
for (int i=0;i<22050*2;i++) 
{ 
    short value=(/*Volume:*/10000*sin(2*3.1415*/*Frequency:*/600*i/22050.0)); 
    data.append((char*)&value,2); 
} 
buffer->setData(data); 
buffer->open(QIODevice::ReadOnly); 
buffer->seek(0); 
output->start(buffer); 

solution assez sale, et je pense qu'il a des fuites de mémoire ... Mais ça marche!

2

Voici un exemple en utilisant Qt; http://diotavelli.net/PyQtWiki/Playing%20a%20sound%20with%20QtMultimedia

Il utilise QAudioOutput pour effectuer la lecture audio PCM.

+0

Ceci est en fait Python Qt ... Je vais essayer de le "traduire" en C++ –

+0

Eh bien, en jouant de l'audio PCM je pense est assez commun donc il devrait toujours être facile de trouver des exemples C++ sur Google. On dirait que vous êtes plus un mec physique qu'un programmeur, donc Qt peut être trop lourd pour vos besoins. Regardez le commentaire de Justin Peel sur la sauvegarde de vos données en .WAV, et en jouant avec une API simple comme 'PlaySound'. – tenfour