pulseaudio_simple_ffi 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/pulseaudio_simple_ffi.rb +81 -0
- metadata +56 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 324f42050991907e598a07461cd34c8ab769007ea5e0ff7d54eedfcb8fac7ad7
|
4
|
+
data.tar.gz: 5e3975522438e7f336b3c00b8516aa7e9cba6c611bdf4d1729e9988537b1ad0b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1e29605c1749a89f969261c6d536e33687e9c8d7c3186543eabb82c8e5d7e4d0548ad483309168c43f9ac7846c5a12de3cbbb3af269901e7055e9580733e2d11
|
7
|
+
data.tar.gz: ba26d196240d5ea0d9c85f0632486b2f6685e7a491b0b620ef827e7015faa5698a314951987eec7b472f65104b7a3c422c7069fd72026436bc84c18d5589b554
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'ffi'
|
3
|
+
|
4
|
+
module PulseAudioSimpleFFI
|
5
|
+
extend FFI::Library
|
6
|
+
ffi_lib 'pulse-simple'
|
7
|
+
|
8
|
+
class IntPtr < FFI::Struct
|
9
|
+
layout :value, :int
|
10
|
+
end
|
11
|
+
|
12
|
+
enum :sample_format, [
|
13
|
+
:u8, :alaw, :ulaw,
|
14
|
+
:s16le, :s16be,
|
15
|
+
:f32le, :f32be,
|
16
|
+
:s32le, :s32be,
|
17
|
+
:s24le, :s24be,
|
18
|
+
:s2432le, :s2432be,
|
19
|
+
:max, -1,:invalid
|
20
|
+
]
|
21
|
+
|
22
|
+
enum :stream_direction, [
|
23
|
+
:nodirection, # invalid direction
|
24
|
+
:playback, # playback stream
|
25
|
+
:record, # record stream
|
26
|
+
:upload # sample upload stream
|
27
|
+
]
|
28
|
+
|
29
|
+
class PulseSampleSpec < FFI::Struct
|
30
|
+
layout :format, :sample_format,
|
31
|
+
:rate, :uint32,
|
32
|
+
:channels, :uint8
|
33
|
+
end
|
34
|
+
|
35
|
+
attach_function :simple_new, :pa_simple_new, [
|
36
|
+
:string, # server name or NULL for default
|
37
|
+
:string, # A descriptive name for this client (application name, ...)
|
38
|
+
:stream_direction, # Open this stream for recording or playback?
|
39
|
+
:string, # Sink (resp. source) name, or NULL for default
|
40
|
+
:string, # A descriptive name for this stream (application name, song title, ...)
|
41
|
+
PulseSampleSpec, # The sample type to use
|
42
|
+
:pointer, # (UNIMPLEMENTED) The channel map to use, or NULL for default
|
43
|
+
:pointer, # (UNIMPLEMENTED) Buffering attributes, or NULL for default
|
44
|
+
IntPtr # A pointer where the error code is stored when the routine returns NULL. It is OK to pass NULL here.
|
45
|
+
], :pointer # Returns type pa_simple*, intentionally undefined in user API.
|
46
|
+
|
47
|
+
attach_function :simple_get_latency, :pa_simple_get_latency, [:pointer,:int], :uint64
|
48
|
+
attach_function :simple_write, :pa_simple_write, [:pointer,:strptr,:uint64,IntPtr], :int
|
49
|
+
attach_function :simple_free, :pa_simple_free, [:pointer], :void
|
50
|
+
|
51
|
+
class PulseAudioSimpleO
|
52
|
+
def initialize name,desc,server:nil,device:nil,map:nil,buffer:nil,format: :f32le,rate:44100,channels:2
|
53
|
+
ps=PulseSampleSpec.new
|
54
|
+
ps[:format]=format
|
55
|
+
ps[:rate]=rate
|
56
|
+
ps[:channels]=channels
|
57
|
+
@err=IntPtr.new
|
58
|
+
@err[:value]=0
|
59
|
+
# "correct form" is commented below, map and buffer unimplemented in active code
|
60
|
+
#@handle=PulseAudioSimpleFFI.simple_new(server,name,:playback,device,desc,ps,map,buffer,@err)
|
61
|
+
@handle=PulseAudioSimpleFFI.simple_new(server,name,:playback,device,desc,ps,nil,nil,@err)
|
62
|
+
throw [@err[:value],'Error in simple_new(), PulseSimpleO.initialize.'] unless 0 == @err[:value]
|
63
|
+
end
|
64
|
+
def write buf
|
65
|
+
@err[:value]=0
|
66
|
+
PulseAudioSimpleFFI.simple_write @handle,buf,buf.length,@err
|
67
|
+
throw [@err[:value],'Error in simple_write(), PulseSimpleO.write.'] unless 0 == @err[:value]
|
68
|
+
end
|
69
|
+
def free
|
70
|
+
PulseAudioSimpleFFI.simple_free @handle
|
71
|
+
@handle=nil
|
72
|
+
end
|
73
|
+
def latency
|
74
|
+
@err[:value]=0
|
75
|
+
val=PulseAudioSimpleFFI.simple_get_latency @handle,@err
|
76
|
+
throw [@err[:value],'Error in simple_get_latency(), PulseSimpleO.latency.'] unless 0 == @err[:value]
|
77
|
+
val
|
78
|
+
end
|
79
|
+
alias :close :free
|
80
|
+
end
|
81
|
+
end
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pulseaudio_simple_ffi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Benjamin Cook
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-04-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ffi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.15'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.15'
|
27
|
+
description: A Ruby-FFI implementation of the PulseAudio Simple API.
|
28
|
+
email: root@baryon.it
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/pulseaudio_simple_ffi.rb
|
34
|
+
homepage: https://github.com/Canar/pulseaudio_simple_ffi
|
35
|
+
licenses: []
|
36
|
+
metadata: {}
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.0'
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
requirements: []
|
52
|
+
rubygems_version: 3.2.15
|
53
|
+
signing_key:
|
54
|
+
specification_version: 4
|
55
|
+
summary: A Ruby-FFI implementation of the PulseAudio Simple API.
|
56
|
+
test_files: []
|