amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > RAW Soundausgabe [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

13.10.2004, 19:00 Uhr

MaikG
Posts: 5172
Nutzer
Hallo,

Kennt jemand ein kurzen Source damit man RAW-Samples
abspielen kann (kHz etc. ist alles bekannt).
Hab kein Sourcecode gefunden bzw. nur einen der
20 Unterprogramme hat und 8SVX abspielt.

[ - Antworten - Zitieren - Direktlink - ]

13.10.2004, 19:14 Uhr

thomas
Posts: 7680
Nutzer

code:
audio = Open("audio:b/16/c/2/f/44100",MODE_NEWFILE);
Write (audio,cd_audio_sample,1000000);
Close (audio);


(das ist nicht ganz ernst gemeint, aber funktioniert, wenn AHI installiert ist)

Gruß Thomas


--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

13.10.2004, 22:24 Uhr

bubblebobble
Posts: 707
Nutzer
Du machst folgendes, wenn die Datei
komplett in den Speicher soll, also kein Streaming:

- RAW Datei öffnen
- Speicher allocieren so lange wie die Datei ist
- Datei auf diesen Speicherbereich reinladen
- RAW Datei schliessen
- AHI Message vorbereiten mit Pointer auf den Speicherbereich
- ahi.device öffnen
- AHI Message ans ahi.device schicken
...kann man nun so oft schicken wie man will...
- ahi.device schliessen
- Message + Speicher freigeben

Ich kann dir dazu leider nur Source in AmiBlitz geben,
ist aber prinzipiell genauso wie in C.
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

14.10.2004, 08:43 Uhr

MaikG
Posts: 5172
Nutzer
Ich dachte mehr an die Ausgabe unter Paula.

Gestern hab ich ja noch eine weile rumprobiert, der
Source ist jetzt 200 Zeilen inclusive der Kommentare.

Ich würde gerne noch die länge der Datei über
die dos.library abfragen, ist besser als die länge
2 mal zu definieren.
Weiss jemand den Befehl dafür?

[ - Antworten - Zitieren - Direktlink - ]

14.10.2004, 09:58 Uhr

thomas
Posts: 7680
Nutzer
Zwei Möglichkeiten:

1.

fib = AllocDosObject(DOS_FIB,NULL);
fhand = Open(filename,MODE_OLDFILE);
ExamineFH(fhand,fib);
size = fib->fib_Size

2.

fhand = Open(filename,MODE_OLDFILE);
Seek (fhand,0,OFFSET_END);
size = Seek (fhand,0,OFFSET_BEGINNING);

1a. (OS1.3-Stil)

fib = AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
lock = Lock(filename,SHARED_LOCK);
Examine(fhand,fib);
size = fib->fib_Size
UnLock (lock);
fhand = Open(filename,MODE_OLDFILE);

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/


[ Dieser Beitrag wurde von thomas am 14.10.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

14.10.2004, 10:15 Uhr

bubblebobble
Posts: 707
Nutzer
Ih würde sagen über AHI ist einfacher als direkt über Paula.
Mit dem Nebeneffekt, dass es nicht nur auf Classic und WinUAE läuft.
Wenns also nicht Classic Only sein soll, dann besser AHI.
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

14.10.2004, 10:50 Uhr

MaikG
Posts: 5172
Nutzer
Dank!

Ich nehme das 2. war seek nicht sowas wie in der Datei
weiterspringen?
Mit der 2. Routine springt man ja zum Ende wenn ich das
richtig verstehe, also müsste ich wieder zum Anfang
springen wenn ich die offene Datei weiter benutzen möchte?

@bubble

Ich möchte das es auch auf A500 von Diskette läuft,
deshalb kein AHI.
Ich habe keinen AONE, wird das audio.device da nicht
emuliert?

[ - Antworten - Zitieren - Direktlink - ]

14.10.2004, 13:44 Uhr

thomas
Posts: 7680
Nutzer

Seek springt zu der angegebenen Position in der Datei und liefert die Position, an der sie vorher stand, zurück. Das erste Seek springt ans Ende der Datei und das zweite springt wieder an den Anfang zurück, wobei es die vorherige Position (also das Ende der Datei) zurückliefert.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

14.10.2004, 18:55 Uhr

MaikG
Posts: 5172
Nutzer
Hab schon probiert, ging auf Anhieb. Danke!

[ - Antworten - Zitieren - Direktlink - ]

15.10.2004, 19:04 Uhr

MaikG
Posts: 5172
Nutzer
Hätte da doch noch eine Frage. Ich habe den Ton nur
auf der Rechten Seite, kann es sein das im Beispiel
die channel allocation falsch ist?

Ist so definiert $01020408

[ - Antworten - Zitieren - Direktlink - ]

15.10.2004, 19:56 Uhr

thomas
Posts: 7680
Nutzer

Ja. Die Bytes der Allokation werden mit "oder" verknüpft. D.h. du bekommst mit dieser Allokation immer genau einen Kanal. Mit 030c würdest du jeweils einen rechten und einen linken Kanal gleichzeitig allokieren (also 0+1 oder 2+3).

Das löst aber nicht dein Problem. Denn trotz Allokation von zwei (oder mehr) Kanälen wird der Ton immer noch auf nur einem Kanal abgespielt. Um den Ton auf mehreren Kanälen gleichzeitig abzuspielen, mußt du den IORequest duplizieren, die Allokationen ändern (wenn du 03 allokiert hast, muß der eine IORequest 01 und der andere 02 bekommen, bei 0c der eine 04 und der andere 08) und die Samples jeweils mit beiden IORequests abspielen.

Das ist auch in den RKRMs so beschrieben. Ob es dafür ein Beispiel gibt, weiß ich nicht.

Mit AHI geht es einfacher (s.o.)

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

16.10.2004, 10:26 Uhr

MaikG
Posts: 5172
Nutzer
030c - Die letzten Bytes?

Das Beispiel hatte eine Routine doppelt, ich dachte das
sei für Stereo-Samples. Jedoch war da immer nur
der Rechte Kanal deshalb hab ich das 2. entfehrnt.

Dann werde ich das erstmal wieder Einfügen und die
Channel-Allokation ändern.

[ - Antworten - Zitieren - Direktlink - ]

16.10.2004, 13:32 Uhr

thomas
Posts: 7680
Nutzer
Zitat:
030c - Die letzten Bytes?

Nein, alle Bytes.

Du gibst die Länge und eine Folge von Bytes an. Jedes Byte stellt eine Kombination von Kanälen dar, die dich zufrieden stellt. Welche du tatsächlich bekommen hast, steht anschließend im IORequest.

01 = Kanal 0
02 = Kanal 1
03 = Kanal 0 und 1
04 = Kanal 2
05 = Kanal 0 und 2
06 = Kanal 1 und 2
07 = Kanal 0, 1 und 2
08 = Kanal 3
09 = Kanal 0 und 3
0a = Kanal 1 und 3
0b = Kanal 0, 1 und 3
0c = Kanal 2 und 3
0d = Kanal 0, 2 und 3
0e = Kanal 1, 2 und 2
0f = alle vier Kanäle.

Wobei jeweils Kanal 0 und 3 links und Kanal 1 und 2 rechts sind (oder umgekehrt, da streiten sich die Experten, ist auch von Modell zu Modell verschieden).

Du kannst auch einfach 0f angeben, dann bekommst du alle vier Kanäle oder gar keinen. Das ist aber nicht sehr freundlich gegenüber anderen Programmen.

Die korrekte Folge für Stereosound (oder ein Sample auf beiden Lautsprechern, das kommt ja auf's selbe raus) wäre also 03050a0c.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

16.10.2004, 17:29 Uhr

MaikG
Posts: 5172
Nutzer
Ah, jetzt gehts.
Ich hab den IORequest dupliziert und mit jedem Request
das audio.device geöffnet.
Die Abspiel Routine dann auch jeweils für Request 0 und 1.

Ist das richtig das man 2xAudio öffnen und schließen muss?
Enforcer-Hits bekomme ich nicht.

[ - Antworten - Zitieren - Direktlink - ]

20.10.2004, 14:02 Uhr

Holger
Posts: 8092
Nutzer
Zitat:
Original von thomas:
Seek springt zu der angegebenen Position in der Datei und liefert die Position, an der sie vorher stand, zurück. Das erste Seek springt ans Ende der Datei und das zweite springt wieder an den Anfang zurück, wobei es die vorherige Position (also das Ende der Datei) zurückliefert.

Wobei das unter FFS mit sehr großen Dateien extrem langsam werden kann. Dafür liefert es auch dann die richtige Länge, wenn in dem Directory-Eintrag eine falscher Größe steht.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.10.2004, 15:08 Uhr

MaikG
Posts: 5172
Nutzer
Ist aber kein Problem sind ja nur Mono-Samples max. 25kB
Ich fand es nur besser als im Programm die größe in
Variablen zu haben. Falls ich den Sample ändere oder
das ganze in einem anderen Programm brauche.

Ist das 2x audio.device öffnen nun Richtig?

[ - Antworten - Zitieren - Direktlink - ]

20.10.2004, 15:16 Uhr

gni
Posts: 1106
Nutzer
Zitat:
MaikG:
Ist das 2x audio.device öffnen nun Richtig?

Es ist nicht falsch. In dem Fall mußt Du es aber auch zwei mal schliessen.

[ - Antworten - Zitieren - Direktlink - ]

20.10.2004, 19:11 Uhr

MaikG
Posts: 5172
Nutzer
Okay, dann wird das so müssen. Danke nochmal @all

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > RAW Soundausgabe [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2022 by amiga-news.de - alle Rechte vorbehalten.
.