- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Wav Dateien und kein Ende

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Anzeige

    LiFePo4 Akku selber bauen - Video
    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!

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    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

  3. #13
    HaWe
    Gast
    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.
    Geändert von HaWe (27.06.2016 um 09:09 Uhr)

  4. #14
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    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.

  5. #15
    HaWe
    Gast
    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

  6. #16
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    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.

  7. #17
    HaWe
    Gast
    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.

  8. #18
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    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.
    Geändert von hirnfrei (27.06.2016 um 11:52 Uhr)

  9. #19
    HaWe
    Gast
    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.

  10. #20
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Sobald ich das eingelesene Array wieder abspielen kann baue ich die Funktionen. Dann kannst du entscheiden ob du sie verwenden kannst/willst oder nicht.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 27.01.2016, 11:42
  2. IAA 2015: Roboterautos brauchen kein Gaspedal und kein Lenkrad
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 18.09.2015, 18:00
  3. Babylon und kein Ende
    Von oberallgeier im Forum Offtopic und Community Tratsch
    Antworten: 3
    Letzter Beitrag: 09.11.2012, 21:47
  4. MOSFET für Powerboad (5m länge, 14kW, KEIN Modellboot) 100V 100A P-Ch und kein SMD
    Von Schmidtbot im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 14.04.2012, 10:54
  5. tini26 timer1 und kein ende
    Von magic33 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 26.02.2007, 16:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad