2009-10-13 14 views
0

Je joue moi-même avec des algorithmes de détection de début/temps. Mon entrée est un fichier .wav et ma sortie est un fichier .wav; J'ai accès à l'ensemble de la forme d'onde en morceaux de tableaux float [].Ajout de "ticks audibles" à une forme d'onde pour le débogage de la détection de début

J'ai du mal à trouver un bon moyen de déboguer et d'évaluer mes algorithmes. Comme mes entrées et sorties sont toutes deux auditives, je pensais que cela aurait plus de sens si mon installation de débogage était aussi auditive, par exemple. en ajoutant des "ticks" ou des "beeps" audibles au fichier .wav aux points de début.

Est-ce que quelqu'un a des idées sur la façon de faire cela? Idéalement, ce serait une simple boucle pour que je puisse parcourir quelques centaines ou quelques milliers d'échantillons.

+1

Quel est votre problème? Trouver le début ou ajouter un clic/bip? – innaM

Répondre

1
float * sample = first sample where beep is to be mixed in 
float const beep_duration = desired beep duration in seconds 
float const sample_rate = sampling rate in samples per second 
float const frequency = desired beep frequency, Hz 
float const PI = 3.1415926.. 
float const volume = desired beep volume 
for(int index = 0; index < (int)(beep_duration * sample_rate); index++) 
{ 
    sample[index] += 
     sin(float(index) * 2.f * PI * sample_rate/frequency) * volume; 
} 
+0

Nice. 15 caractères 15 caractères –

+0

Merci, c'était agréable et simple et a parfaitement fonctionné. Deux questions de suivi, si cela ne vous dérange pas. 1) la notation 2.f; Je n'avais jamais vu ça avant. 2.0f ne m'aurait pas surpris, mais 2.f est nouveau pour moi. Est-ce que cela fait partie de la syntaxe C++ ou de la syntaxe C? 2) A votre avis, qui est "plus correct": insérer le bip commençant au début du battement, ou insérer le bip de sorte que son point médian s'aligne avec le battement? – psa

+0

(1) un nombre à virgule flottante est une mantisse et une période suivie d'une partie fractionnelle facultative (http://msdn.microsoft.com/en-us/library/tfh6f0w2(VS.71).aspx); donc 2. serait aussi syntaxe valide, mais produirait un double. (2) puisque le but de ceci est le débogage, selon ce qui vous permet le mieux de savoir à l'oreille quand votre algorithme est cassé est le "plus correct";) – moonshadow

1

Mauvaise réponse de l'homme: trouvez un enregistrement de bip ou de bip, puis mélangez-le avec la forme d'onde originale à chaque moment désiré. Vous mélangez simplement en faisant la moyenne des valeurs du bip et de la forme d'onde d'entrée pendant la durée du signal sonore.

0

Déterminez où dans votre échantillon vous voulez insérer votre tick (inclure la longueur de la coche, donc c'est une plage, pas un point). Prenez le FFT de cette section de la forme d'onde. Ajoutez à la représentation du domaine fréquentiel toutes les composantes de fréquence que vous désirez pour votre son "tick" (le plus simple serait juste une seule fréquence). Effectuez la FFT inverse sur le résultat et voila, vous avez votre ton mélangé dans le signal d'origine. Je pense (cela fait un moment que je l'ai fait).