Polecenie odwrotne do "copy /b" w DOS-ie

0

temat: polecenie odwrotne do copy /b w DOS-ie

problem: wypakowanie plików .wav, które były złączone w jeden o rozszerzeniu .dat

jakie ma być rozwiązanie: potrzebuję znać dokładne czasy trwania każdego z utworów, które są w JEDNYM pliku .dat (lub .wav), i ew.ilość wszystkich plików.

dlaczego pytam: przerobiłem ten .dat na .wav i tylko dlatego wiem, że jest w nim wiele plików wav,
dla upewnienia się stworzyłem z innych wav poniższą metodą jeden plik .dat i przerobiłem go następnie na .wav- identyk jak ten co chcę "wypakować", tyle, że oczywiście zrobiłem to z innych pliczków...

Jak to zrobiłem:

  1. nowy plik tekstowy,
  2. piszę w nim:
    COPY /B *.WAV 1.DAT
  3. zapisuję
  4. zmieniam rozszerzenie z .txt na .bat
  5. uruchamiam
  6. do przerbiania na wav użyłem wybranego programu w poleceniu:
    wybrany_program.EXE 1.dat mono 16 11025

Niestety nie mogłem znaleźć żadnego programu, który potrafi wypakowywać pliki .dat, a oczywiście zmiana rozszerzenia z .dat na .zip, .rar, .itp nie skutkuje.

Liczę na szybką i wyczerpującą odpowiedź!!!

0

W hepie copy i xcopy (xp) nie widzę opcji do kopiowania z danego offsetu. Może spakuj pliki do .cab (makecab.exe) a wypakuj programem extract?
Nie gwarantuję że istnieją 16 bitowe wersje tych programów.
A tak nawiasem mówiąc - mógłbyś sobie taki program sam napisać, przecież wielkość każdego wava jest zapisana w wavie - "RIFFsize".

0

Może napiszę jeszcze jaśniej co muszę z tym zrobić:

Jest plik .dat(.wav), którego zawartości nie posiadam. Nie wiem co zrobić, aby otrzymać dokładne czasy trwania każdego z plików, które są w środku.

Mam za to inne pliki, które wiem jak ułożyć, aby otrzymać plik .dat NIEMAL identyczny jak ten .dat, którego zawartości nie wiem jak wypakować.

Mój zrobiony .dat ma zastąpić go, ale musi on mieć w sobie pliki, których czasy trwania(i ilość) mają być w 100% identyczne jak w tym .dat, którego zawartości nie mam.

Wypakowanie zawartości bardzo mi w tym pomoże.

0
  1. Wczytaj 4 bajty i zignoruj je, będzie to FOURCC 'RIFF'
  2. Wczytaj 4 bajty do zmiennej DWORD N - masz długość pojedyńczego wav'a razem z 4 bajtami RIFF i wielkości.
  3. 8 bajtów z punktu 1,2 zapisz w nowym pliku wav
  4. następne N bajtów z .dat zwyczajnie skopiuj do już 8-bajtowego .wav.
  5. goto 1

Tu masz pseudo kod

// DWORD musi być 4-bajtowy
struct WAVE_HDR
{
	char riff[4]; // 'RIFF'
	DWORD size;
	//char[size] // 'WAVE', 'fmt ', 'data' ...
};/*
struct DAT_FILE
{
	WAVE_HDR h[any_size];
}*/


WAVE_HDR h;

while (read(dat, &h, sizeof(h)) == sizeof(h))
{
	// można sprawdzić czy h.riff == 'RIFF'
	// oraz czy seek(dat) + h.size <= filesize(dat)
	wav = create("file_%d.wav", licznik++);
	write(wav, h, sizeof(h));

	char bigbuffer[1024];
	while (h.size)
	{
		int bytesread = read(dat, bigbuffer, min(1024, h.size));
		if (!bytesread) break;
		write(wav, bigbuffer, bytesread);
		h.size -= bytesread;
	}
	close(wav);
}
0

Naprawdę bardzo dziękuję za zaangażowanie i pomoc, ale niestety muszę się przyznać, że o programowaniu nic nie wiem.

Jedyne co mogę zrobić to przesłać plik .wav, z którego chcę wyciągnąć czasy trwania każdego z utworów jakie są w środku.
Oto link:
http://rapidshare.com/files/245484491/U-voice.wav.html

Będę wdzięczny za wszelką pomoc i oczywiście jak okaże się to wystarczająco łatwe i bezproblemowe- proszę o podanie czasu każdego z utworów jakie są w środku tego .wav.

Pozdrawiam!!

0

To chyba do dzialu praca bardziej sie nadaje.

0

Temat mogę uznać za zamknięty- w osiągnięciu mojego celu pomoże mi program o nazwie "Wavosaur".

1 użytkowników online, w tym zalogowanych: 0, gości: 1