Windows Beep () эквивалентный для Linux

Со связанным типом

Приведенный ниже код с использованием универсального кода верен, но, подумав об этом, я думаю, что использование связанного типа может быть более подходящим здесь. Черта должна выглядеть следующим образом:

pub trait HashMapContainer {
    type Value;
    fn get_hash_map(&self) -> &HashMap;
    fn get_hash_map_mut(&mut self) -> &mut HashMap;
}

Разница в том, что теперь вы можете реализовать черту только один раз для структуры, а не несколько раз, что является более правильным в этом случае. .

Реализации примерно такие же, как с параметром универсального типа.

impl HashMapContainer for HashMapContainerImpl1 {
    type Value = String;
    fn get_hash_map(&self) -> &HashMap {
        &self.map
    }
    fn get_hash_map_mut(&mut self) -> &mut HashMap {
        &mut self.map
    }
}

impl HashMapContainer for HashMapContainerImpl2 {
    type Value = u8;
    fn get_hash_map(&self) -> &HashMap {
        &self.map
    }
    fn get_hash_map_mut(&mut self) -> &mut HashMap {
        &mut self.map
    }
}

( Детская площадка )

Вы также можете посмотреть на Когда уместно использовать связанный тип по сравнению с универсальным типом? , который объясняет разницу между этими двумя довольно хорошими.

С универсальным типом

Это можно решить, введя универсальный тип в вашу черту HashMapContainer.

pub trait HashMapContainer {
    fn get_hash_map(&self) -> &HashMap;
    fn get_hash_map_mut(&mut self) -> &mut HashMap;
}

Я изменил подпись, чтобы вернуть ссылку на HashMap. Было бы возможно сделать это без, например, используя clone или принимая self в качестве значения, а не в качестве ссылки. Я также представил _mut версию.

Реализация является прямым предисловием:

impl HashMapContainer for HashMapContainerImpl1 {
    fn get_hash_map(&self) -> &HashMap {
        &self.map
    }
    fn get_hash_map_mut(&mut self) -> &mut HashMap {
        &mut self.map
    }
}

impl HashMapContainer for HashMapContainerImpl2 {
    fn get_hash_map(&self) -> &HashMap {
        &self.map
    }
    fn get_hash_map_mut(&mut self) -> &mut HashMap {
        &mut self.map
    }
}
7
задан supermedo 5 January 2009 в 11:17
поделиться

6 ответов

Проверьте исходный код для звукового сигнала, доступного с Ubuntu (и вероятно другие дистрибутивы), или взгляните на http://www.johnath.com/beep/beep.c для другого источника (это - тот же код, я верю).

Это позволяет Вам управляющей частоте, длине и повторениям (среди прочего) легко.

9
ответ дан 6 December 2019 в 21:21
поделиться

позволяет имеют нас некоторый gabba, прибывающий из динамиков

#!/usr/bin/ruby

$audio = File.open("/dev/audio", "w+")
def snd char
    $audio.print char.chr
end

def evil z
    0.step(100, 4.0 / z) { |i|
        (i / z).to_i.times { snd 0 }
        (i / z).to_i.times { snd 255 }
    }
end

loop {
    evil 1 
    evil 1
    evil 1
    evil 4
}

более серьезно, хотя:

//g++ -o pa pa.cpp -lportaudio
#include <portaudio.h>
#include <cmath>

int callback(void*, void* outputBuffer, unsigned long framesPerBuffer, PaTimestamp, void*) {
    float *out = (float*)outputBuffer;
    static float phase;
    for(int i = 0; i < framesPerBuffer; ++i) {
        out[i] = std::sin(phase);
        phase += 0.1f;
    }
    return 0;
}

int main() {
    Pa_Initialize();
    PaStream* stream;
    Pa_OpenDefaultStream(&stream, 0, 1, paFloat32, 44100, 256, 1, callback, NULL);
    Pa_StartStream(stream);
    Pa_Sleep(4000);
}
4
ответ дан 6 December 2019 в 21:21
поделиться

Я не знаком с Linux, но символ ASCII вывода 0x07, кажется, делает тот прием от того, что я считал с быстрым поиском Google.

0
ответ дан 6 December 2019 в 21:21
поделиться

В итоге:

  1. Вывод символа BEL на терминал может издать звуковой сигнал - в зависимости от того, какой это терминал и какова его конфигурация. Однако это не контролируется.

  2. Любой звук, который вам нравится, может быть получен путем вывода аудиоданных в / dev / dsp или другое звуковое устройство. Это включает в себя звуковой сигнал, но для создания звука необходимо воспроизвести реальный семпл.

  3. Драйвер консоли обеспечивает (в некоторых конфигурациях) ioctl для / dev / console, который издает звуковой сигнал с настраиваемой высотой звука (во многом аналогично NT)

0
ответ дан 6 December 2019 в 21:21
поделиться

Я предложил бы, чтобы Вы посмотрели на источник для утилиты звукового сигнала. это делает точно, что Вы хотите. (а именно, это открывает "/dev/console" и использует ioctl для запроса звукового сигнала. обратите внимание, что это будет только работать над приложенной консолью),

0
ответ дан 6 December 2019 в 21:21
поделиться

этот сайт показывает два пути:

char beep[] = {7, ”};
printf(“%c”, beep);

и

Beep(587,500);
-1
ответ дан 6 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: