szyfrowanie głosu

1

Cześć.

Czytałem wczoraj sobie taki artykół w internecie:
http://www.tl2000.pl/produkty/telefony_gsm/xaos_gamma/jak_dziala_szyfrowanie

I tak sobie zastanawiam się, czy dało by radę zrobić to w C#. Chodzi głównie o to szyfrowanie głosu, na razie nie mam pojęcia jak za to się zabrać. Zacząłem poszukiwania na ten temat (czyli: dokumentacja, fragment kodu programu, przykładowy program w C#), ale nic nie znalazłem, może pod złym hasłem szukałem. :(

Może coś podobnego robiliście i wiecie jak za to się zabrać?
Jak tak to proszę o pomoc.

Guest

0

Da się.

http://www.codeproject.com/KB/audio-video/VoiceChatApplicationInCS.aspx

Masz tu komunikator audio.
Wydaje mi się ze wystarczyło by szyfrować pakiety ;)

0

Dzięki konserwa, ale ja mam problem z tym szyfrowaniem głosu. A w tym przykładzie nie widziałem jak to się robi. Ale dobre i tyle. :(

0

chodzi co o konkretne szyfrowanie czy coś ?

0

Chodzi o szyfrowanie.

0
  List<byte> soundBytes = new List<byte>(File.ReadAllBytes(@"C:\Users\Public\Music\Sample Music\a_barf.wav"));

            //jakies gówniane rozkodowanie
           for (int i = 45; i <= soundBytes.Count - 1; i++)
            {
                soundBytes[i] = (byte)(soundBytes[i] - i);//tu mozna wpisac własne kodowanie
            }
          
            //dekodowanie jakies gówniane
            for (int i = 45; i <= soundBytes.Count - 1; i++)
           {
               soundBytes[i] = (byte)(soundBytes[i] + i);//tu mozna wpisac własne dekodowanie
           }
            MemoryStream memo = new MemoryStream(soundBytes.GetRange(0,soundBytes.Count).ToArray(), true);
            System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(memo);
            myPlayer.Play();

Kodowanie pliku Wav. Jak widać to tylko kwestia wybranego kodowania i zmieniania bajtów :) tu od 45 bo plik wav ma jakies tam gówniane informacje wcześniej.

Co do kodowania telefony mają różne jedne łatwiejsze inne trudniejsze które wybierzesz takie będzie.

0

Mam jeszcze jedno pytanie, a jak bym zrobił, zamiast tak:

List<byte> soundBytes = new List<byte>(File.ReadAllBytes**(@"C:\Users\Public\Music\Sample Music\a_barf.wav")**);

podawania ścieżki do pliku (ręcznie), tylko za pomocą openfiledialog podaje ścieżkę dzwiękową pliku *.mp3 i *.wav. Też zadziała ten mechanizm?

0

do pliku Wav tak do mp3 nie ponieważ SoundPlayer nie obsługuje mp3 plików.
Zresztą MP3 ma inną budowę.

MP3
ID: String[3]; // czy Tag istnieje?
Title : String[30]; // tytuł
Artist : String[30]; // wykonawca
Album : String[30]; // album
Year : String[4]; // rok wydania
Comment : String[30]; // komentarz
Genre : String[30]; // typ ? np. POP, Techno, Jazz itp.

plik Wav
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

Zobacz ze kodowanie dźwięku zaczyna się od 45(powinno od 44 ale 45 niech będzie) ponieważ niżej znajdują sie informacje o pliku.

Może oda mi się napisać przykład na mikrofon jak ściągnę DirectX sdk.

1

Kodowanie pliku Wav. Jak widać to tylko kwestia wybranego kodowania i zmieniania bajtów :) tu od 45 bo plik wav ma jakies tam gówniane informacje wcześniej.

Co? Format .wav (tak jak np. .png) jest typu RIFF -> co oznacza że nie ma podziału typu "nagłówek i dane" tylko dzieli się na chunki z których każdy ma swój nagłówek i wewnętrzną budowę.
Niech zgadnę zobaczyłeś obrazek na stronie i więcej nie szukałeś? :)
A z mp3 jest jeszcze fajniej, dzieli się na ramki z których każda jest niezależna od pozostałych. Nie ma też żadnego nagłówka pliku. Możesz wrzucić cokolwiek na początek i dalej będzie działać.

Nvm, po co omijać jakiekolwiek dane skoro zaszyfrowany plik się i tak do niczego nie nada. Szyfrujcie wszystko i będzie dobrze :]

0
Co? Format .wav (tak jak np. .png) jest typu RIFF -> co oznacza że nie ma podziału typu "nagłówek i dane" tylko dzieli się na chunki z których każdy ma swój nagłówek i wewnętrzną budowę.

Ale jeżeli je zmieni plik przestanie działać.
a on chciał zakodować tylko dźwięk.

0

No właśnie ja chce zakodować dzwięk. Tylko jest mały problem przy kodowani mp3. Przydał by się jakiś uniwersalny algorytm do tego wszyskigo. :) Żeby we wszystkich formatach dzwiękowych szyfrował dzwięk.

0

Koduj wiec cały plik wal to ze tam są tytuły typy itd

Jedyna wada jest taka ze nie będzie możliwości włączenia go bez dekodowania(w ogóle plik będzie opisany jako uszkodzony).

Sam dźwięk zaczyna się od 255 bajta(szczelam)?

0

MP3 składa się z ramek, czy też lepiej przetłumaczyć jako „klatek”. Każda klatka ma własny nagłówek i może mieć np. inny bitrate. Sam sposób zapisu dźwięku jest baaaaaaardzo skomplikowany.
WAV to plik-kontener, podobny w strukturze do AVI tylko nie ma strumienia video. Jest to plik formatu RIFF — coś jak XML tylko binarne: jest to sposób zapisu danych, dzielenia na drobniejsze cząstki (chunks). Sposób zapisu dźwięku w pliku WAV może być różny. Może być to dźwięk nieskompresowany (PCM) albo z zastosowaniem jakiegoś kodeka, w tym MP3. Nie ma ścisłego numeru bajta, od którego zaczyna się dźwięk. To trzeba odczytać ze struktury RIFF.

1

Konserwa - specjalnie dla Ciebie - wavChker. Wyświetla wszystkie ramki/klatki/jak zwał tak zwał w pliku .wav . Zachęcam do zabawy.

WavChker.zip
(Do użycia z cmd, source included)

Output dla pierwszego lepszego pliku na moim komputerze:

Found chunk fmt  at C
Found chunk data at 24
Found chunk bext at 2B1F0
Found chunk CDif at 2B452
Found chunk CDif at 2B49E
Found chunk CDif at 2B4EA
Found chunk minf at 2B536
Found chunk elm1 at 2B54E
Found chunk regn at 2B6A8
Found chunk ovwf at 2B70C
Found chunk umid at 2B718

Więc nie mów mi proszę że jedyna ramka/klatka/jak zwał tak zwał to 'fmt '.

0

moze i masz racje

sprawdzałem 2 pliki i były tylko te 2 linie

Found chunk fmt  at C
Found chunk data at 24
0

Czy ten kod jest poprawny? Bo u mnie nic się nie dzieje, po wybraniu pliku z partycji pliku i po podaniu hasła szyfrowania.

  List<byte> soundBytes = new List<byte>(File.ReadAllBytes(@"C:\Users\Public\Music\Sample Music\a_barf.wav"));
 
            //jakies gówniane rozkodowanie
           for (int i = 45; i <= soundBytes.Count - 1; i++)
            {
                soundBytes[i] = (byte)(soundBytes[i] - i);//tu mozna wpisac własne kodowanie
            }
 
            //dekodowanie jakies gówniane
            for (int i = 45; i <= soundBytes.Count - 1; i++)
           {
               soundBytes[i] = (byte)(soundBytes[i] + i);//tu mozna wpisac własne dekodowanie
           }
            MemoryStream memo = new MemoryStream(soundBytes.GetRange(0,soundBytes.Count).ToArray(), true);
            System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(memo);
            myPlayer.Play();
0

Nie wiem po co zmieniać tablicę bajtów na listę, potem nie używać żadnych jej metod, a na końcu zamienić ją z powrotem na tablicę.

1

Czy ten kod jest poprawny? Bo u mnie nic się nie dzieje, po wybraniu pliku z partycji pliku i po podaniu hasła szyfrowania.

To jest znak w znak przykład konserwy.
Wydaje mi się że spodziewasz się że ten kod poprosi o nazwę pliku, zażąda hasła i jeszcze dokona szyfrowania czy czegośtam?

0

Podawanie pliku i pole hasło mam zrobione (zaprojektowane, oprogramowane, itd.). Chcę tylko, żeby wypluwał dzwięk w postaci pliku zaszyfrowanego. :)

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