Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Wav Dateien und kein Ende
hirnfrei
26.06.2016, 03:31
Mahlzeit!
Ich werde verrückt echt! Bislang hatte ich mich nie gross um bestehende Formate gekümmert. Meine Programme haben in der Regel immer ihre eigenen Formate erstellt, konnten die dann logischerweise auch lesen usw. Jetzt stehe ich vor dem Problem ein Wav einlesen zu wollen. Das geht prinzipiell gut, die Header bekomme ich alle wie es sein soll und eigentlich die Daten auch. Spiele ich die nach dem Einlesen direkt über die Soundkarte ab funktioniert das auch tadellos. Nur will ich ja mit den Daten auch arbeiten, diese manipulieren können und da scheitert es komplett bei mir.
Gebe ich den Inhalt der Wav als Return aus einer Funktion heraus, bekomme ich nur Schrott. Denke ich mal. Will ich das Array dann (samt Header natürlich!) wieder in einer anderen Funktion abspielen kommt es entweder zu einem schrillen Piiiiiiiiiiiep oder zu einem Speicherzugriffsfehler. Wenn ich mir das Array anschaue stelle ich auch fest, dass nur ein Viertel seiner Grösse auch mit Daten gefüllt sind. Der Rest sind 0 und dann stürzt das Programm auch ab, obwohl das Array mittels Malloc soger ein klein wenig mehr Speicher bekommen hat, wie es laut Header eigentlich bräuchte.
Kann mir da bitte bitte einer unter die Arme greifen? Irgendwo übersehe ich was und ich habe nicht den blassesten Schimmer wo...
peterfido
26.06.2016, 07:36
Hallo,
ganz so ohne compilierbaren Code wird da keiner wirklich helfen können. Das wäre zu spekulativ. Dann fehlen noch Details. Wie groß ist das Array und wieviel wird davon zurückgegeben / behalten. Evtl. lässt sich da das Limit für die Arraygrößen erkennen. Du gibst doch bestimmt nur den Zeiger auf das Array zurück und lässt nicht wirklich den ganzen Array von einer in die andere Variable kopieren >> Siehst Du, ich muss schon spekulieren ;)
hirnfrei
26.06.2016, 16:05
Also der Code um die Datei zu lesen und zu dekodieren sieht so aus:
int32_t *loadWave(char *waveDatei, FILE_head& head, FORMAT &format, CHUNK_head &chead)
{
register snd_pcm_uframes_t count, frames;
int datei;
int32_t *waveBuffer;
datei = open(waveDatei, 00);
if(datei)
{
read(datei, &head, sizeof(FILE_head));
read(datei, &chead, sizeof(CHUNK_head));
read(datei, &format, sizeof(FORMAT));
waveBuffer = (int32_t *) malloc(head.Length);
head.Length = read(datei, waveBuffer, head.Length) - 1;
close(datei);
return waveBuffer;
}
return (int32_t *) -1;
}
ich würde erstmal alles blind aus dem File byte-weise in einen byte-array einlesen, und dann erst später den Array nach Header und Daten zerpflücken, dann die wav-Daten isolieren / separieren und in einen int32_t array umkopieren:
#include <stdio.h>
long read_wavfile(FILE * fp)
{
uint8_t c, cbuf[SHRT_MAX*4]; // byte array, oversized
long n=0;
fp = fopen ("myfile.wav","r"); // oder über popen() und Zenity
do {
cbuf[n++] = c = fgetc(fp);
} while ( (c != EOF) && (n<SHRT_MAX*4 -1) );
close(fp);
return n;
}
jetzt Header ignorieren, dann Anfang der wav-Daten suchen (Position x), und dann Daten ab x in den int32_t input-Array rüberkopieren (ab Pos. 0).
(nur als grobe Idee)
hirnfrei
26.06.2016, 20:07
So ähnlich hatte ich es schon und hatte dann am Ende den selben Effekt.
while ( (c != EOF) && (n<SHRT_MAX*4 -1) );
Dieser Teil lässt mich schliessen das es dir in erster Linie um selbst erstellte Wave-Dateien geht?
eigentlich nicht, denn dann würde sogar ein kleinerer cbuf array reichen - so hätte man aber sogar noch reichlich Spielraum für Stereo und höhere Sample-Raten.
edit:
Längere Arrays dürfen es aber dann wirklich nicht sein, denn es wird ja später auf SHRT_MAX Daten-Werte zurückgeschnitten.
hirnfrei
26.06.2016, 20:15
Dann wird es noch ein wenig dauern befürchte ich ;)
Ich würde bei meinem ANSI-C-Code anfangen - so komplett falsch wird der möglicherweise gar nicht sein.
Und ANSI C ist ja eh das Ziel des ganzen.
hirnfrei
26.06.2016, 21:10
Dein Ziel ;).
Wie gesagt, so hatte ich es ja schon und genau genommen macht mein Code es nicht wirklich anders, nur das er gleich die Teile nimmt die Header sind.
Ich bin da aufgeschlossen, Lass uns doch parallel arbeiten. Plotten kannst du und über die Soundkarte ausgeben geht mit meiner playCaptured Funktion ja auch. Vielleicht kriegst du es mit deiner Methode schneller hin wie ich. Damit würden wir zwei Ansätze verfolgen, doppelte Chance auf Erfolg ^^.
Hallo,
ich mag ja nicht Eure Bemühungen hier anzweifeln doch gibt es zum Lesen von Sounddateien (inkl. WAV) die libsnfile-Bibliothek. Die ist in C implementiert nur weiß ich nicht ob die auch als Paket für den RPI gibt. Wäre vielleicht mal einen Blick Wert?
https://github.com/erikd/libsndfile
http://www.mega-nerd.com/
Ansonsten fallen mir folgende Dinge auf
Negative Zeiger gibt es in C nicht,
return (int32_t*) -1;
führt sicher zu Problemen!
Dann frag ich mich (weil ich selbst keinen RPI mein Eigenen nennen kann) ob die Byte-Order der Felder korrekt ist?
Du ließt einfach die Bytes mit dem read() ein. Wenn der Cortex-A nicht in LSB die Daten ablegt, wie sie in der WAV stehen, dann kann da nix Richtiges bei raus kommen.
Warum ziehst Du beim letzten read() einfach ein Byte in der Länge ab? Das sind doch keine Strings, die Du da einließt.
Ich gehe davon aus das in Deiner Implementierung jeder Rückgabewert der read()-'s geprüft wird und Du das der Übersicht halber hier weg gelassen hast?
Ansonsten frage ich mich warum ihr intern nicht mit Fließkommazahlen arbeiten wollt? Jede DAW oder Audiosoftware benutzt die.
Für Gesang bzw. Spache benutzt man immer nur Mono-Aufnahmen (einzige Ausnahme die ich kenne sind Chor-Aufnahmen). Das spart nicht nur Platz sondern Rechenzeit und vor alllem für Eure Correlation Fehlerquellen.
Grüße
Chris
hirnfrei
26.06.2016, 21:39
ich mag ja nicht Eure Bemühungen hier anzweifeln doch gibt es zum Lesen von Sounddateien (inkl. WAV) die libsnfile-Bibliothek. Die ist in C implementiert nur weiß ich nicht ob die auch als Paket für den RPI gibt. Wäre vielleicht mal einen Blick Wert?
So etwas habe ich schon gesucht! Schaue ich mir auf JEDEN FALL an!
Negative Zeiger gibt es in C nicht,
In C++ habe ich da weniger Probleme mit. Ist aber keine schöne Nummer die ich da mache, ist auch nur ein Provisorium.
Wenn der Cortex-A nicht in LSB die Daten ablegt, wie sie in der WAV stehen, dann kann da nix Richtiges bei raus kommen.
Cortex-A? LSB? Hilfe?
Ich muss aber dazu sagen, wenn ich das was ich da einlese, genau so wie ich es einlese, sofort ausgeben lasse funktioniert es einwandfrei. Also so falsch kann es eigentlich nicht sein.
Warum ziehst Du beim letzten read() einfach ein Byte in der Länge ab? Das sind doch keine Strings, die Du da einließt.
Autsch, damit hatte ich nur was versucht. Das sollte schon längst wieder weg sein :-(.
Ansonsten frage ich mich warum ihr intern nicht mit Fließkommazahlen arbeiten wollt? Jede DAW oder Audiosoftware benutzt die.
Für Gesang bzw. Spache benutzt man immer nur Mono-Aufnahmen (einzige Ausnahme die ich kenne sind Chor-Aufnahmen). Das spart nicht nur Platz sondern Rechenzeit und vor alllem für Eure Correlation Fehlerquellen.
Anstatt int32_t?
Frag mich mal. Das ist das erste Mal das ich überhaupt mit Audio arbeite.
- - - Aktualisiert - - -
libsndfile-dev kann man einfach mit apt-get installieren. Oder auch über die Tools die beim Raspi dabei sind, wenn man es nicht über den Terminal machen will. Ich schaue mir mal an wie man damit Wav liesst, ich denke das ist die einfachste Variante.
Danke für den Tipp!
Du must natürlich, nach dem Du die eigentlichen Audiodaten geladen hast, diese auch richtig bearbeiten.
Die Daten sind ja meist im Interleaved abgelegt (bei stereo), ein Sample Linker Kanal, dann ein Sample rechter Kanal
oder umgekehrt. Zudem können diese 8 Bit 16 Bit 24 ... Bit Format haben, float gibt es glaube ich auch.
Deshalb wäre der ertse Versuch einfach mal einen Kanal totzuschalten, indem Du in deinem gelesenen Puffer
diese Werte auf Null setzt. Dann weist Du ob deine Auswertung erstmal überhaupt richtig ist, wenn Du das
wieder abspielst. Dann kannst Du weiter Versuche starten für die gewünschten Manipulationen, wobei
natürlich immer auch die Samplerate bedacht werden muss bei Filtern ect.
Am besten wäre sicher ein Strukturzeiger auf einen Sample
struct
{
int left;
int right;
} sample;
dann ein Array mit dieser struktur anlegen, dann kann man auf die Samples mit
for (i = 0; i < BufferSize) Sample[i].left = 0;
oder ähnlich zugreifen.
Die meisten CD Samples sind ja im 16 Bit Format abgelegt.
Siro
int32_t hatte ich aus Geschwindigkeitsgründen vorgeschlagen, denn damit rechnet der Pi schneller als mit int16_t oder float oder sogar double.
Es ist nur für Anfangs-Operationen (Einmessen, Rauschen glätten, Vorspann/Nachspann entfernen) gedacht gewesen.
Für die FFT muss aber sowieso dann nochmal alles in double umgewandelt werden, was sicher das eigentliche zeitkritische sein wird.
Von daher könnte man auch bereits beim Lesen der wav-Rohdaten aus dem File alles sofort in einen array double wavbuf[arrlen] um-type-casten, wobei arrlen bei der FFT USHRT_MAX ist, nicht SHRT_MAX.
Auch da könnte man dann gleich Nägel mit Köpfen machen und alles auf die volle Länge skalieren, auch wenn die 2.Hälfte der FFT-Arrays zunächst komplett mit Nullen gefüllt werden muss.
edit:
Ehrlich gesagt bin ich nur jetzt ziemlich überrascht, dass offenbar doch noch keine wav-Files gelesen werden können, denn das sollte doch eigentlich seit 4 Wochen funktionieren - daher auch die ganzen Vorversuche mit dem maskieren der Rohdaten mit 0x00ff, was ja auch nur mit Integer ging, und dann der Vergleich von Daten roh/unmaskiert vs. vereinheitlicht/maskiert. Wenn das damals nicht mit wav-Files korrekt gemacht wurde, müssen wir jetzt wohl nochmal von ganz von vorne anfangen: Denn ohne saubere, definierte und skalierte Datensätze macht eine anschließende FFT ja komplett keinen Sinn.
hirnfrei
27.06.2016, 10:03
Na das spielt doch sndfile voll in die Hände. Die Lib hat nämlich eine Funktion um die Daten von Sound Dateien direkt in Double zu lesen. Dann muss ich nicht anfangen rum zu konvertieren! Sehr gut!
Die Lib ist übrigens echt cool und funktioniert bisher schon sehr gut! Muss nur noch schauen wie ich das so an playCapture sende das es auch korrekt abgespielt wird.
play_wavFile und play_soundArray sind 2 verschiedene Funktionen, die nichts miteinander zu tun haben!
sie dürfen auch keine identischen internen Puffer-Arrays verwenden!
Nur die Funktion
get_wavFileData
liest die wav-File Daten in den internen input Puffer ein
(so wie es auch die Micro-Aufnahme per
record_sound
macht)
die hatten wir bisher noch nicht definiert, da das Öffnen von *.wav über Zenity noch nicht geklappt hat -
sie verwendet die Funktion
c) FILE * fp = open_wavFile(int32_t * array, char * filename); // über Zenity popen() PopUp Window,
extrahiert die reinen sound Daten und kopiert sie in den input Puffer zu Weiterverarbeitung
a) record_sound(int32_t * array, int32_t length);
b) save_sound2wavFile(int32_t * array, FILE * fp, char * filename); // über Zenity popen() PopUp Window
c) FILE * fp = open_wavFile(int32_t * array, char * filename); // über Zenity popen() PopUp Window
d) play_soundArray(int32_t * array, int32_t length);
e) play_wavFile(char * filename); // über Zenity popen() PopUp Window
hirnfrei
27.06.2016, 11:28
Jetzt behalt doch mal die Nerven! Hier gehts nur darum ein Wave zu laden und die Daten in ein Array zu bekommen das ich auch wieder über die Soundkarte abspielen kann. Dann spielt es keine Rolle wie die Funktion heisst nur was sie macht.
was heißt hier "behalt mal die Nerven" und "es ist egal wie sie heißt"?
Ich behalte die Nerven, ich will nur vermeiden, dass du dir unnötige (falsche) Arbeit macht.
Die Namen allerdings sind wichtig, denn ich brauche die vereinbarten Namen der API-Funktionen samt ihrer definierten Syntax, so wie ich sie definiert habe, nicht immer irgendwas anderes. Das ist unser Arbeitsstandard mit der gemeinsam genutzen Schnittstelle.
Je früher du dich an die API-Schnitstellendefinitionen hältst, desto besser.
Lies ggf nochmal die letzten 20 Seiten im wav-Topic, was ich bereits dazu geschrieben und an Code auch gepostet habe - ich habe den Eindruck, du hast das alles nicht exakt zur Kenntnis genommen.
hirnfrei
27.06.2016, 12:36
Ich bin gerade dabei ein Wave so zu laden das man sie in einer verwendbaren Array hat die man auch über die Soundkarte ausgeben kann. Da ich eine Funktion habe die genau das macht, also ein Array drucken und die nunmal zur Zeit noch playCaptured heisst mache ich mir im Moment gar keine Mühe mit der Funktion, ich verwende sie nur. Wenn die Funktion in der Lage ist das Array abzuspielen kümmere ich mich um die weiteren Funktionen.
Lies ggf nochmal die letzten 20 Seiten im wav-Topic, was ich bereits dazu geschrieben und an Code auch gepostet habe - ich habe den Eindruck, du hast das alles nicht exakt zur Kenntnis genommen.
Nur eine Frage damit ich da etwas exakt verstehe. Bin ich irgendwie dein Angestellter oder du mein Auftraggeber? Sollte mir irgendwo entfallen sein, dass wir beide einen Vertrag geschlossen haben, dass ich ein 100% für dich zugeschnittenen Code baue dann tut mir das leid.
Nach meinem letzten Kenntnisstand hat sich das Ganze aus zwei verschiedenen Projekten (deins und meins) dadurch zu einer Zusammenarbeit entwickelt, dass wir ähnliche Ziele haben und es sich als Sinnvoll erwiesen hat da gemeinsame Sache zu machen. Du hast Erfahrung mit FFT, ich konnte dafür die Soundkarte programmieren. Seitdem bin ich eigentlich nur noch dabei meinen Code so um zu stricken wie du das gerne hättest und wie ich leider feststellen musste kam mir mein eigener Code gestern irgendwie fremd vor. Ist das der Sinn dahinter? Ich meine, wenn das so weiter geht kann ich meine eigenen Funktionen dann nicht mehr in meinem eigenen Projekt verwenden.
Ich stehe derzeit auf dem Punkt, dass ich Funktionen baue um Wave zu laden, abzuspielen und zu speichern. Und zwar so das man auch mit der Rückgabe von Zenity diese Funktionen verwenden kann. Beim Laden kommt dann ein Array raus und eine Struktur, mit den notwendigen Angaben (Bit, Hz, Kanäle). Damit wird man dann arbeiten, es abspielen oder speichern können.
ja, und auch die restlichen Funktionen müssen exakt so sein, damit ich sie als Schnittstelle weiterverwenden kann, und daher muss es für mich alles in ANSI C sein.
Wie ich schon mal schrieb:
Ich spreche kein C++, für C++ Code muss dir jemand anderes helfen - aber genau für einige solche Fälle hatte ich bereits ANSI C Code Muster gepostet.
hirnfrei
27.06.2016, 15:25
Sobald ich das eingelesene Array wieder abspielen kann baue ich die Funktionen. Dann kannst du entscheiden ob du sie verwenden kannst/willst oder nicht.
peterfido
27.06.2016, 16:59
Hallo,
ich sehe da die Möglichkeit, einfach eine 'Wrapper'-Funktion zu erstellen. Also eine Funktion, die sich in der gewünschten Syntax aufrufen lässt und dann die Originalfunktion aufruft. Erstmal die wichtigen Funktionen zum laufen bringen und wenn diese dann mit einer anderen Syntax aufgerufen werden soll, einfach eine Wrap-Funktion zwischenschalten oder evtl. gleich per Define umbiegen, wenn möglich.
So könnt Ihr bei allen Funktionen vorgehen. So hat am Ende jeder das so, wie er es haben möchte.
Solange da nicht groß was im Speicher hin-und herkopiert wird, fällt das in der Laufzeit nicht auf.
hirnfrei
27.06.2016, 17:28
So ist ja der Plan. Daher sagte ich ja zu HaWe er soll die Nerven behalten ^^.
- - - Aktualisiert - - -
Wer auch immer Ahnung davon hat, hier kommt mal das Ende des Wav, soweit wie ich es noch aus dem Terminal kopieren konnte.
-0.03125
-0.03125
-0.03125
-0.03125
0
0
0
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.0625
-0.0625
-0.0625
-0.0625
-0.0625
-0.0859375
-0.0625
-0.0625
-0.0625
-0.0625
-0.0625
-0.0625
-0.0625
-0.0625
-0.09375
-0.09375
-0.09375
-0.09375
-0.09375
-0.0625
-0.0625
-0.0625
-0.0625
-0.0234375
-0.0234375
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0.03125
0.03125
0.03125
0.03125
0.03125
0.03125
0.03125
0.03125
0.03125
0.0546875
0.0546875
0.0546875
0.0546875
0.0546875
0.0546875
0.015625
0.015625
0.015625
0.015625
0.0234375
0
0
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0546875
-0.0546875
-0.0546875
-0.078125
-0.078125
-0.078125
-0.078125
-0.078125
-0.109375
-0.078125
-0.109375
-0.109375
-0.109375
-0.109375
-0.109375
-0.109375
-0.101562
-0.101562
-0.078125
-0.0625
-0.0625
-0.0625
-0.0625
-0.0234375
-0.0234375
-0.0234375
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.03125
-0.03125
-0.03125
0
0
0
0
0
0
0
0
0
0.015625
0.015625
0
0
0
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0
0
-0.015625
-0.015625
-0.03125
-0.03125
-0.0546875
-0.0546875
-0.0546875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.0234375
-0.0234375
-0.0234375
0
0
0
0
0
0
0
0
0
0
0
0
-0.0234375
0
0
-0.0234375
-0.0234375
-0.0234375
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0234375
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0
0.0234375
0
0
0
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.0234375
-0.0234375
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0703125
-0.0703125
-0.0703125
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.046875
-0.046875
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
0
0
0
0
0
0
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0078125
0.0078125
-0.0078125
-0.0078125
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0546875
-0.0859375
-0.0859375
-0.0859375
-0.0859375
-0.0859375
-0.0859375
-0.0859375
-0.078125
-0.078125
-0.0546875
-0.0546875
-0.0546875
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.015625
-0.015625
-0.015625
0
0
0
0
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0
0
0
-0.015625
-0.015625
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.046875
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
0
0
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.0234375
0.015625
0.015625
0.015625
0.0078125
0.015625
0.0078125
0.0078125
0.0078125
0.0078125
-0.0078125
-0.0078125
-0.03125
-0.03125
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.0390625
-0.046875
-0.046875
-0.0546875
-0.046875
-0.046875
-0.046875
-0.046875
-0.046875
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.0078125
0
0
0
0
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0234375
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.03125
-0.0078125
-0.0078125
-0.03125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0
0
0
0
0
0.0078125
0.0078125
0.0078125
0.0078125
0.015625
0.0078125
0.015625
0.015625
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0
0
0
0
-0.015625
-0.015625
-0.015625
-0.015625
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.046875
-0.0234375
-0.03125
-0.03125
-0.03125
-0.015625
-0.015625
-0.0078125
-0.0078125
-0.0078125
0
0
0
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0
0.0078125
0.0078125
0
0
0
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0234375
-0.0234375
-0.015625
-0.015625
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.015625
-0.015625
-0.015625
-0.015625
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.0234375
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0
0
0
0
0
0
0
0
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0
0
0
0
0
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.015625
-0.015625
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0
0
0
0
0
0
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.015625
0.0078125
0.0078125
0.0078125
0.0078125
-0.0078125
0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.0234375
-0.015625
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0
0
0
0
0
0
0.015625
0
0
0
0
0
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.015625
0.015625
0.015625
0.0078125
0.015625
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.015625
-0.0078125
-0.0078125
-0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0
0
0
0
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0.0078125
0.0078125
0.0078125
0
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
-0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
0.0078125
-0.0078125
Wer Ahnung davon hat, sieht das aus wie ein abspielbarer Sound?
Bits wären U8
11025Hz
1 Kanal
Das kam bei sndfile raus.
was soll das?
"Daher sagte ich ja zu HaWe er soll die Nerven behalten"
bist du noch ganz bei Trost?
Es ist doch dein Projekt, ich weise lediglich darauf hin, dass du, wenn ich anfangen soll, mich damit zu beschäftigen, die ANSI Standards und meine vorgegebenen API Funktionen einhalten musst.
MIR brennt da in keinster Weise irgendwas unter den Nägeln!
hirnfrei
27.06.2016, 17:59
Wie was soll das? Als ich anfing mit playCaptured wolltest du sofort bestehende Funktionen umbenennen usw. Da ich aber erst einmal überhaupt ein Wave laden und abspielen können will, bevor ich irgendwelche Funktionen drum rum bastle sagte ich dir du sollst die Nerven behalten. Was in unserer Region soviel heisst wie ruhig Blut, eins nach dem Anderen oder so. Ist also weder abwertend, noch beleidigend oder so gemeint.
Aber im Ernst, es ist mein Projekt? Wenn das so ist können wir die ganzen Bemühungen einstellen! Wenn es mein Projekt ist und ich am Schluuss Code habe den ich nicht verwenden kann weil er in keiner Weise mehr meiner eigenen Art der Programmierung entspricht dann ist das Ganze ziemlich sinnfrei.
Zu Deiner sndfile Frage hirnfrei, das ist soweit in Ordnung. Die Werte müssen im Intervall von -1.0 bis 1.0 einschließlich liegen. Alles darunter oder drüber wäre zu laut und würde zum Clipping (Verzerrung) führen.
Gruß
Chris
hirnfrei
28.06.2016, 10:08
Ah ok. Nur wie kommt es das wenn ich mit dem Micro mit 8 Bit (U8) aufnehme, ich Werte zwischen 0 und 255 habe mit 128 als Mittel?
Diese Sounds machen mich voll Konfuzius...
Von -1 bis 1 sind normierte Werte.
Der AD-Wandler kennt keine Fließkommazahlen.
Um von 8bit-Capture-Werten umzurechnen einfach float norm = ( capture-128 ) / 128.0 rechnen.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.