N' “16 bits entier des données PCM” dire que c'est signé ou non signé?
J'utilise FMOD pour développer une application qui permettrait de démarrer immédiatement la lecture de l'enregistrement de la prochaine/précédente phrase exactement à partir de son début dans un fichier MP3 qui contient de la parole, sans la musique, quand l'utilisateur a cliqué sur Suivant/Précédent bouton de. J'ai eu le PCM données d'un fichier mp3 en appelant Son::lock, mais Son::getFormat m'a seulement dit qu'il était "16 bits entier des données PCM", sans dire si c'était signé ou unsigned. Comment je le sais?
Certains articles sur Internet disent que presque tout entier 16 bits PCM données sont signé. Si mes données PCM est signé, quel est l'éventail des valeurs représentent le silence, les valeurs proches de 0 (par exemple -10 ~ 10), ou les valeurs proches de -32768 (par exemple -32768 ~ -32750)? Si elles sont les valeurs proches de 0, cela signifie qu'il n'y a pas de différence de sens opposé des chiffres comme -32767 et 32767?
J'ai besoin de détecter les silences qui sont assez longtemps, par exemple, plus de 500ms, afin de déterminer où chaque phrase dans le discours commence.
Quelqu'un pourrait-il me donner des suggestions sur la façon de détecter le silence entre les phrases?
OriginalL'auteur xiaokaoy | 2015-02-20
Vous devez vous connecter pour publier un commentaire.
16-bit audio est, par convention, signée le plus souvent.
Pensez à ce que de l'audio PCM est: chaque mesure est la distance le long de son axe le haut-parleur doit physiquement reste à ce moment dans le temps. Donc un parfait silence est absolument aucune répétition de la valeur que représente le haut-parleur ne bouge pas.
0 est alors le centre de la plage, et généralement lorsqu'un microphone doit être sans entrée. -32768 est le haut-parleur à proximité de l'une des extrémités de son axe, comme il peut être, 32767 est à l'autre extrémité.
Le plus sûr moyen de détecter le silence serait pour exécuter une analyse spectrale au-dessus de la plage et de regarder pour les périodes où il n'y a aucune activité dans n'importe quelle plage de fréquence audible.
Si vous êtes à la recherche pour des pauses entre les discours alors la chose la plus simple serait probablement pour aller à quelque part, comme cette, plug acceptable une plage de fréquences de la parole (il est considéré comme être autour de 300Hz à environ 3500Hz dans la téléphonie), votre taux d'échantillonnage et cependant de nombreuses multiplications vous pensez que vous pouvez vous permettre. Copier les coefficients fournis. E. g. Je suppose que vous allez faire 37 robinets à travers le discours de gamme avec un 44100Hz entrée et converti en C tableau, j'ai eu:
Si c'était
double
d'entrée, pour chaque échantillon d'entréec
je puis à calculer une valeur échantillonnée:Ce que j'ai ensuite obtenu est un filtre passe-bande. Seule la partie du signal qui représente son dans la gamme de fréquences de 300–3500Hz devrait rester dans les valeurs de sortie. Dans la vraie vie, pas d'un tel filtre est parfait; augmenter le nombre de coefficients à augmenter la qualité de votre filtre.
Avoir coupé non pertinentes des parties du signal alors je pourrais les regarder pendant de longues périodes de
sampledValue = [close to] 0.0
.Taps est le traitement du signal terme pour le nombre d'échantillons d'entrée qui sont combinées pour effectuer une sortie de l'échantillon. Il s'agit plus de la matériel de la tradition côté des choses. Il n'a pas besoin d'être de 37, c'est juste la valeur par défaut de la page. Vous devriez probablement prendre basée sur les performances subjectives — plus = mieux, en général. Comme pour les performances du PROCESSEUR, de regarder dans l'aide de votre processeur SIMD unité pour l'ensemble de la chose (ce qui peut signifier à l'aide de point fixe shorts plutôt que de double, mais soit). La sortie est filtré vague. Vous pouvez écouter directement. Regarder pendant de longues périodes proche de 0 pour trouver les silences.
OriginalL'auteur Tommy
Étonnamment si je créer directsound soundbuffers avec 8Bit format, directsound attend les échantillons à 8 bits SIGNÉ (-127 à 127) sur ma machine alors que quand je crée un 16Bit tampon directsound attend d'eux d'être 16 bits non signé (0 - 65535). Ainsi, au moins sur ma machine la norme semble être à l'opposé de Tommy réponse.
OriginalL'auteur Marc