amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > RAW Soundausgabe [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2004-10-13, 19:00 h

MaikG
Posts: 5172
User
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.

[ - Answer - Quote - Direct link - ]

2004-10-13, 19:14 h

thomas
Posts: 7717
User

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/

[ - Answer - Quote - Direct link - ]

2004-10-13, 22:24 h

bubblebobble
Posts: 707
User
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



[ - Answer - Quote - Direct link - ]

2004-10-14, 08:43 h

MaikG
Posts: 5172
User
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?

[ - Answer - Quote - Direct link - ]

2004-10-14, 09:58 h

thomas
Posts: 7717
User
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. ]

[ - Answer - Quote - Direct link - ]

2004-10-14, 10:15 h

bubblebobble
Posts: 707
User
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



[ - Answer - Quote - Direct link - ]

2004-10-14, 10:50 h

MaikG
Posts: 5172
User
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?

[ - Answer - Quote - Direct link - ]

2004-10-14, 13:44 h

thomas
Posts: 7717
User

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/

[ - Answer - Quote - Direct link - ]

2004-10-14, 18:55 h

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

[ - Answer - Quote - Direct link - ]

2004-10-15, 19:04 h

MaikG
Posts: 5172
User
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

[ - Answer - Quote - Direct link - ]

2004-10-15, 19:56 h

thomas
Posts: 7717
User

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/

[ - Answer - Quote - Direct link - ]

2004-10-16, 10:26 h

MaikG
Posts: 5172
User
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.

[ - Answer - Quote - Direct link - ]

2004-10-16, 13:32 h

thomas
Posts: 7717
User
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/

[ - Answer - Quote - Direct link - ]

2004-10-16, 17:29 h

MaikG
Posts: 5172
User
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.

[ - Answer - Quote - Direct link - ]

2004-10-20, 14:02 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2004-10-20, 15:08 h

MaikG
Posts: 5172
User
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?

[ - Answer - Quote - Direct link - ]

2004-10-20, 15:16 h

gni
Posts: 1106
User
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.

[ - Answer - Quote - Direct link - ]

2004-10-20, 19:11 h

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

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > RAW Soundausgabe [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.