-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: tone library auch für Raspi

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    1.762

    tone library auch für Raspi

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    hallo,
    durch Stöbern in einigen Raspi- und Arduino-Foren bin ich auf eine wünschenswerte Ergänzung gestoßen, die auch für den raspi schön wäre:
    eine Lib, um Töne aus dem Stegreif zu erzeugen.
    Arduino C/C++ macht dies durch tone() ,
    andere libs durch beep(),
    und so was wäre doch auch als Ton-Signal für den Pi schön, ausgegeben auf seine Kopfhörerausgänge (nicht über GPIOs).
    Wer will, könnte dann sogar damit tatütata oder amerikanisch wuiwuiwuwiwui oder Hänschenklein damit ganz schnell mal eben programmieren.
    Für frequency gibt es ja auch #defines mit festen Notentasten
    (#define _A4_ 440.0,
    #define _Dis6_ 1244.51 etc.).

    Die Syntax, die man häufig liest ist in der Art
    tone(frequency, duration)
    tone(frequency, duration, loudness)
    (die Pin-Angabe, die man für Arduino braucht, fällt hier ja weg)

    Ebenfalls häufig liest man etwas in der Art wie
    tone(frequency, duration, loudness, samplerate)

    Vielfach wurde diese Frage überall schon mal gestellt, aber nie gab es wirklich eine erkennbare Lösung (höchstens vage Links auf Monsterlibs wie alsa).

    Hat hier jemand trotzdem Kenntnis von so einer Lib, entweder bereits irgendwo gepostet oder für eigene Zwecke mal als Hilfsfunktion selber erstellt?
    Geändert von HaWe (05.10.2016 um 14:28 Uhr)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    91
    Nur mal so als Idee zum suchen bei dem Komandozeilen Befehl der das löst:
    Code:
    apt-get install beep
    Wenn Du Details der Implementierung wissen willst den Sourcecode des Debian Pakets installieren und schauen wie die das machen.

    Du kannst auch den beep Befehl in den Meisten Programmiersprachen einfach als Externes Programm aufrufen. Die Funktionen lauten oft exec oder system oder so ähnlich. Ich weiß ja nicht mit was Du Programmierst.

    Alexander

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    314
    Mit ein Problem, welches zum Fehlen von Libs führt, ist die Faulheit der Entwickler. Ich habe auch schon für viele Dinge eigene Parser geschrieben, die schlummern aber auf meiner Platte, da ich keine Lust habe das ganze Zeug allgemeinverständlich zu formatieren und zu dokumentieren. Zumal ja auch viele Entwickler sowieso gerne ihr eigenes Süppchen kochen. Es ist also durchaus denkbar, dass irgendjemand einen Parser für solche Sounds geschrieben hat und benutzt, diese aber aus Faulheit nicht weiter gibt.

    Da bliebe für dich nun die Frage, kannst du Funktionen schreiben, welche das gewünschte Ergebnis liefern? Wenn ja, würdest du den Aufwand betreiben es allgemeinverständlich zu formatieren, zu dokumentieren und zu veröffentlichen? In dem Fall wäre der Missstand einer fehlenden Lib in diesem Fall beseitigt.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    1.762
    ich selber habe es immer gemacht, weil ich OpenSource und Public Domain für eine gute und unterstützenswerte Sache halte - sowohl für Lego NXC als auch Arduino als auch ein ganz wenig für den Pi, der selber noch Neuland für mich ist.
    beep() habe ich heute Nachmittag ausprobiert, funktioniert aber nicht (kein "PC Lautsprecher" am Pi, der normale Audio-Jack wird wohl nicht erkannt),
    Speaker test ebenfalls probiert, das funktioniert immerhin, es gibt aber dafür keine kurzen Töne soweit ich es selber ausprobiert als auch im Web gelesen habe (2-4 sek. Minimum).
    Ich selber kann aber keine Soundlibs schreiben, zuwenig Kenntnis über alsa und die ganzen Soundtreiber und die viel zu komplizierten Soundfunktionen. Könnte ich es, würde ich es selbstverständlich veröffentlichen, aber zur Zeit bin ich (wohl auf Jahre hinaus) noch auf fertige Libs angewiesen, die genau die Art von Wrappern für C/C++ zur Verfügung stellen, wie ich sie im TOP beschrieben habe.
    Das gilt auch sicher für eine ganze Menge weiterer Libs, wie sie z.B. zu Hunderten aber z.B. bereits für den Arduino schon existieren. Diesen ganzen Ideen- und Code-Pool muss man jetzt auch für den Pi sammeln und zusammenstellen.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    91
    Das wusste ich nicht das der beep nur mit dem alten PC-Speaker geht. Ich dachte auf neuerer Hardware würde das über den Treiber der Soundkarte realisiert. Sorry.

    Eine neue LIB für die Soundkarte zu schreiben ist vermutlich nicht Sinnvoll. Die wird nicht wirklich kleiner werden als die anderen die es gibt. Da eine Soundkarte selbst keine Töne erzeugen kann. Wie es zum Beispiel der PC-Speaker macht. Du musst die Töne per Software berechnen und dann an die Soundkarte übergeben.

    Was ich noch gefunden habe ist der aplay der kann verschiedene Audio Formate Spielen wie z.B. WAV. Das funktioniert auch habe ich dieses mal vorher ausprobiert. Der aplay musste bei mir nicht extra installiert werden. Dann müsstest Du unter den Formaten die der abspielen kann nur ein einfaches suchen und per Software den Ton oder die Töne generieren und an aplay übergeben. Das sollte funktionieren.

    Die Software des PI und der Arduinos kann man nicht wirklich vergleichen die Hardware des PI ist um größen Ordnungen höher als die der Arduinos ebenso das Betriebsystem das es bei Arduinos überhaupt nicht gibt. Daher sind Lösungen nicht immer mit einigen KB größen Libs zu bekommen Leisten aber auch sehr viel mehr. Dafür hat der PI ja auch mehr an Speicher und Rechenleistung zu bieten. Wenn Dir die Soundkarte zu komplex ist kannst Du aber mit einem kleine Verstärker einen Lautsprecher an einen PWM Pin des PI anschließen und dann mit diesem Töne erzeugen. Das macht der PC-Speaker so ähnlich.
    Geändert von alexander_ro (10.10.2016 um 23:16 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    1.762
    Alexander, was eine "Soundkarte" angeht, hast du meinen Post missverstanden.
    Der Raspi hat keinen PC Speaker, daher funktioniert beep() auch nicht (sondern anscheinend nur auf Linux-PCs, die einen eingebauten Systemlautsprecher besitzen).
    Wenn du aber zeigen kannst, wie man beep auf einem Standard-Raspi zur Tonausgabe über Audiojack bzw. HDMI bringen kann, dann zeige es einfach - bisher konnte ich kenen entsprechenden Hinweis im web finden.
    Also nochmal:
    Die Ausgabe soll auf Kopfhörer bzw standard-Ausgabe-Device (d.h. je nach Einstellung eben auch HDMI) erfolgen, genau wie die Ausgabe von z.B. omxplayer oder aller anderen Sounds, die der Raspi standardmäßig wiedergibt (vom wav file bis zum youtube Video).
    Die Ton- Ausgabe soll durch Aufruf der Funktion innerhalb eines C/C++ Programms erfolgen können, am besten durch eine dar eingebundene C/C++ lib oder c+p des kompletten dafür nötigen Sourcecodes oder notfalls auch einen system call.
    Die Syntax soll in etwa sein, wie ich es oben im TOP beschrieben habe, also ähnlich wie

    tone(frequency, duration)
    tone(frequency, duration, loudness)

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    91
    Es gibt auch PC ohne den klassischen PC-Lautsprecher und der beep geht aber trotzdem. Mir war nicht bekannt das das nicht bei allen ohne den PC-Lautsprecher so ist weil es zufällig bei meinen so geht.

    Die von Dir angegebene Funktion wird so nie eine MP3 Datei oder ähnliches spielen können. Die Sounddateien sind Digitalisierte Spannungsverläufe und keine Noten. Ein kleiner aber wichtiger Unterschied.

    Da der Raspi mit dem aplay oder dem von Dir genannten omx Sounddateien spielen kann muss die Lib die Du suchst bereits auf dem System vorhanden sein. Ich verstehe jetzt nicht warum Du nicht einfach mal den Sourcecode der Programme anschaust wie die das machen. Es gibt für Linux hunderte an offenen Programmen die Töne nach allen Arten machen man muss halt bereit sein auch mal irgendwo rein zu schauen. Wenn einem das zu viel Arbeit ist besteht halt noch die Möglichkeit mit dem exec einen externen Player zu bemühen damit der das Spielen übernimmt. Dabei muss man halt per Software die gewünschten Töne errechnen im einfachsten Fall mit der Sinusfunktion. Das ist auch nicht die schlechteste Lösung weil Du in Deinem Programm dann auch diese Funktion nicht pflegen musst. Nebenbei ein recht gängiger Weg in der gesamten UNIX/Linux Welt.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    1.762
    wenn du weißt wie es mit beep() geht, dann zeig es, und es geht nicht um mp3 Daten oder wav files sondern um ad-hoc-Erzeugung von Tönen.
    Theoretische Erklärungen helfen hier aber nicht zur Beantwortung der TOP-Frage, sondern nur eine Funktion oder Lib, die das definitiv leistet.
    Wenn du also so etwas entsprechendes als Sourcecode kennst, gut, dann zeige sie auch und poste sie hier,
    wenn nicht, hilft es nicht weiter.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    91
    Nein ich weiß nicht warum das auf manchen geht und anderen nicht. Ich habe das heute bei einem Kunden probiert da ging es auch nicht. Vermutlich haben einige Treiberentwickler den Syscall auf die Soundkarte um gebogen und andere ignorieren den einfach.

    Suchmaschine spukte noch das aus: http://raspberrypi.stackexchange.com...beep-on-wheezy
    Ich habe es nicht probiert soll aber gehen laut den Texten.

    Ich wundere mich nur wenn Du C/C++ Programme schreibst warum Du nicht mal bei Programmen die tun was Du möchtest in den Sourcecode schaust was die verwenden. Sehr hilfreich und auch lehrreich was ander tun. Töne kannst Du auch adhoc auch über einen Player adhoc erzeugen.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    1.762
    wenn du glaubst, dass es geht mit beep auf Raspi, dann probiers aus - und poste das Ergebnis. Nach meinen Versuchen und Recherchen tut es das nicht.
    Wenn du Programme findest, die das tun, was ich suche, poste den genauen Sourcecode bitte, ich finde keine,
    und wenn du weißt, wie man "Töne auch adhoc auch über einen Player adhoc erzeugen" kann, dann poste es bitte ebenfalls - es muss allerdings über ein C/C++ Programm zur Ausführung gebracht werden.

    Wie ich schrieb: Allgemeines Gerede bringt nichts, poste eine Lösung, alles andere ist nicht zielführend.

    PS, Anm.: auf meinem Raspi läuft Debian Jessie 8, 4.4.13-v7+ falls das eventuell irgendwie wichtig sein könnte)
    Geändert von HaWe (11.10.2016 um 14:07 Uhr)

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. DMA Kanäle als PWM auf dem Raspi
    Von Hellmut im Forum Raspberry Pi
    Antworten: 5
    Letzter Beitrag: 09.05.2016, 00:15
  2. ARM TrustZone und Raspi 3B
    Von Hellmut im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 12.04.2016, 16:06
  3. Antworten: 63
    Letzter Beitrag: 18.02.2016, 08:43
  4. [ERLEDIGT] Raspi Club?
    Von pofoklempner im Forum Raspberry Pi
    Antworten: 16
    Letzter Beitrag: 09.07.2015, 07:20
  5. Antworten: 0
    Letzter Beitrag: 10.01.2008, 02:52

Berechtigungen

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