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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/pulseaudio_simple_ffi.rb +81 -0
  3. 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: []