[][src]Struct ghakuf::writer::Writer

pub struct Writer<'a> { /* fields omitted */ }

ghakuf's SMF builder.

This builds SMF by Message enums and write out. Message enum consists of MetaEvent, MidiEvent, SysExEvent, and TrackChange. You can use running status if you want. At track change, you should use not only MetaEvent::EndOfTrack message, but also TrackChange message.

Examples

use ghakuf::messages::*;
use ghakuf::writer::*;
use std::path;

let path = path::Path::new("tests/writer_doctest.mid");
let tempo: u32 = 60 * 1000000 / 102; //bpm:102
let mut messages: Vec<Message> = vec![
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::SetTempo,
        data: [(tempo >> 16) as u8, (tempo >> 8) as u8, tempo as u8].to_vec(),
    },
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::EndOfTrack,
        data: Vec::new(),
    },
    Message::TrackChange,
    Message::MidiEvent {
        delta_time: 0,
        event: MidiEvent::NoteOn { ch: 0, note: 0x3c, velocity: 0x7f },
    },
    Message::MidiEvent {
        delta_time: 192,
        event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 },
    },
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::EndOfTrack,
        data: Vec::new(),
    }
];

let mut writer = Writer::new();
writer.running_status(true);
for message in &messages {
    writer.push(&message);
}
writer.write(&path);

Implementations

impl<'a> Writer<'a>[src]

pub fn new() -> Writer<'a>[src]

Builds Writer with initial value.

Writer's membertypeinitial value
messagesVec<&'a ghakuf::messages::Message>Vec::new()
formatghakuf::formats::Formatghakuf::formats::Format::F1
time_baseu16480
running_statusboolfalse

Examples

use ghakuf::writer::Writer;

let writer: Writer = Writer::new();

pub fn messages(&self) -> &Vec<&'a Message>[src]

Returns keeping messages by borrowing.

Examples

use ghakuf::messages::Message;
use ghakuf::writer::Writer;

let message = Message::TrackChange;
let mut writer: Writer = Writer::new();
writer.push(&message);
assert_eq!(*writer.messages(), vec![&message]);

pub fn push(&mut self, message: &'a Message)[src]

Pushes message to writer.

Examples

use ghakuf::messages::{Message, MidiEvent};
use ghakuf::writer::Writer;

let message = Message::MidiEvent {
    delta_time: 0,
    event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 },
};
let mut writer: Writer = Writer::new();
writer.push(&message);

pub fn remove(&mut self, index: usize) -> &'a Message[src]

Removes message from writer.

Examples

use ghakuf::messages::{Message, MetaEvent, MidiEvent};
use ghakuf::writer::Writer;

let mut messages_a: Vec<Message> = vec![
    Message::MidiEvent {
        delta_time: 0,
        event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 },
    },
    Message::TrackChange,
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::EndOfTrack,
        data: Vec::new(),
    }
];
let mut writer: Writer = Writer::new();
for message in &messages_a {
    writer.push(&message);
}
writer.remove(1);
assert_eq!(*writer.messages()[0], Message::MidiEvent {
    delta_time: 0,
    event: MidiEvent::NoteOn { ch: 0, note: 0x40, velocity: 0 },
});
assert_eq!(*writer.messages()[1], Message::MetaEvent {
    delta_time: 0,
    event: MetaEvent::EndOfTrack,
    data: Vec::new(),
});

pub fn format(&mut self, format: u16) -> &mut Writer<'a>[src]

Sets SMF format value (Format 0, Format 1 or Format 2) by formats::Format::*.

Examples

use ghakuf::writer::Writer;

let mut writer: Writer = Writer::new();
writer.format(0);

pub fn time_base(&mut self, time_base: u16) -> &mut Writer<'a>[src]

Sets SMF time base value.

Examples

use ghakuf::writer::Writer;

let mut writer: Writer = Writer::new();
writer.time_base(960);

pub fn running_status(&mut self, running_status: bool) -> &mut Writer<'a>[src]

Sets bool value whether you adopt running statusor not.

Examples

use ghakuf::writer::Writer;

let mut writer: Writer = Writer::new();
writer.running_status(true);

pub fn write(&self, path: &Path) -> Result<(), Error>[src]

Writes out SMF messages you stored.

Examples

use ghakuf::messages::*;
use ghakuf::writer::*;
use std::path;

let path = path::Path::new("tests/writer_write_doctest.mid");
let tempo: u32 = 60 * 1000000 / 102; //bpm:102
let mut messages: Vec<Message> = vec![
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::SetTempo,
        data: [(tempo >> 16) as u8, (tempo >> 8) as u8, tempo as u8].to_vec(),
    },
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::EndOfTrack,
        data: Vec::new(),
    },
    Message::TrackChange,
    Message::MidiEvent {
        delta_time: 0,
        event: MidiEvent::NoteOn { ch: 0, note: 0x3c, velocity: 0x7f },
    },
    Message::MetaEvent {
        delta_time: 0,
        event: MetaEvent::EndOfTrack,
        data: Vec::new(),
    }
];

let mut writer = Writer::new();
for message in &messages {
    writer.push(&message);
}
writer.write(&path);

Auto Trait Implementations

impl<'a> RefUnwindSafe for Writer<'a>

impl<'a> Send for Writer<'a>

impl<'a> Sync for Writer<'a>

impl<'a> Unpin for Writer<'a>

impl<'a> UnwindSafe for Writer<'a>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.