rumu 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/rumu +31 -40
  3. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4eb3a0747c545c987b03ae0bd8117cfb613f5b30ee9ced1e80105b7dd8f9ef1
4
- data.tar.gz: 06a8c5ca36e3003a558f0336220f09e3fc6451d234ba10d9a233a6e010920733
3
+ metadata.gz: c513bd3c485e3d4e1e4cd93bd78fd8697f681e06f4b02f621074381b2e3adc74
4
+ data.tar.gz: 31d65a7899a76517cf5259268835f41b5cf21ff49ab7f22173014e0c303c90de
5
5
  SHA512:
6
- metadata.gz: dec6313820cd82b3c62b3be05678d57dc5ba514e212e0962f3186bd010c431b7e251ea19989f8efe64050214f2c1442b4d9893476b6ce7d740286df19ff9e688
7
- data.tar.gz: 6c59f26842bf443479e56ddf020d3410cdfa8a90262f5b1ecbd15d04bceffe334b657b92981189c13b70293b148b2aa28b7a2566fa0311a089496811e2fd1da6
6
+ metadata.gz: 9f54f7c90953189088f948baa1e7cd1a3e93bdecd93ff0a2fcc367e39a3ce1b15a52992688615ea239739b7ca9f201cea20b2b3269c18d07c80c50cb78dd1704
7
+ data.tar.gz: ceab4d9aabb925ae942c17153a20da8568a87ce3dd98a089525f813718338894ca3dbfe4775143d541e03d96119e1c36e3868381bee1f13654762246f692fa25
data/bin/rumu CHANGED
@@ -3,53 +3,46 @@ require 'open3'
3
3
  require 'shellwords'
4
4
  require 'io/console'
5
5
  require 'pathname'
6
- require 'pulseaudio_simple_ffi'
6
+ require 'pulseaudio_simple_fiddle'
7
7
 
8
- Pkg='rumu'
9
- Ver='0.4.1'
8
+ Pkg,Ver='rumu','0.4.2'
10
9
  ConfigDir="#{Dir.home}/.config/#{Pkg}"
11
10
  Dir.mkdir(ConfigDir) unless File.directory?(ConfigDir)
12
11
 
13
12
  Channels,Rate,WordSize=2,44100,4
14
13
  FfmpegFmt="-ac #{Channels} -ar #{Rate} -f f#{WordSize*8}le"
15
14
 
16
- class FfmpegPipeO
15
+ class BasicO
16
+ def write(buf) = buf == nil ? buf : @dev.write(buf)
17
+ def close = @dev.close
18
+ end
19
+
20
+ class FfmpegPipeO < BasicO
17
21
  def initialize(device, channels: Channels, rate: Rate, wordsize: WordSize )
18
22
  device = device.to_s.chomp.length>0 ? device.to_s.chomp : '-f pulse default'
19
- @in,@out,@err,@thr = Open3.popen3("ffmpeg -loglevel -8 #{FfmpegFmt} -i - #{device}")
23
+ @dev,@out,@err,@thr = Open3.popen3("ffmpeg -loglevel -8 #{FfmpegFmt} -i - #{device}")
20
24
  @out.close
21
25
  @err.close
22
26
  end
23
- def write buf
24
- @in.write buf
25
- end
26
- def close
27
- @in.close
28
- end
29
27
  end
30
28
 
31
- class ConfigO
29
+ class ConfigO < BasicO
32
30
  def initialize file: ConfigDir+'/out'
33
- @mode=:pulse
34
- @device=nil
31
+ @mode,@devname=:pulse,nil
35
32
  if File.file?(file)
36
33
  cfg=File.read(file).split("\n")
37
34
  @mode=cfg[0].to_sym
38
- @device=cfg[1].to_s.chomp.length>0 ? cfg[1] : nil
35
+ @devname=cfg[1].to_s.chomp.length>0 ? cfg[1] : nil
39
36
  end
40
- File.write(file,@mode.to_s+"\n"+@device.to_s)
41
- @out= :ffmpeg == @mode ?
42
- FfmpegPipeO.new(@device) :
43
- PulseAudioSimpleFFI::PulseAudioSimpleO.new(Pkg,'Music Playlist',channels:Channels,rate:Rate,device:@device)
44
- end
45
- def write buf
46
- @out.write buf
47
- end
48
- def close
49
- @out.close
37
+ File.write(file,@mode.to_s+"\n"+@devname.to_s)
38
+ @dev= :ffmpeg == @mode ?
39
+ FfmpegPipeO.new(@devname) :
40
+ PulseAudio::SimpleO.new(Pkg,'Music Playlist',channels:Channels,rate:Rate,device:@devname)
50
41
  end
51
42
  end
52
43
 
44
+ def print_brand = print "\r ] #{Pkg} ✝ v#{Ver} [ "
45
+
53
46
  list,list_i,cycle,mode,ssoff,help=[],0,0,:load,'',''
54
47
  if ARGV.length==0
55
48
  if File.file?("#{ConfigDir}/list")
@@ -66,17 +59,16 @@ if ARGV.length==0
66
59
  exit 1
67
60
  end
68
61
  else
69
- list=ARGV.map{|x|Pathname(x).realpath.to_s}
62
+ list=ARGV.map{|x| Pathname(x).realpath.to_s}
70
63
  end
71
64
  prefix=/\A(.*).*(\n\1.*)*\Z/.match(list.join("\n"))[1]
72
65
  puts prefix
73
66
 
74
- ii,io,ie,it=nil,nil,nil,nil
75
67
  oo=ConfigO.new
76
-
77
68
  bq=SizedQueue.new 4
78
69
 
79
70
  iit=Thread.new {
71
+ io,ie=nil,nil
80
72
  until :quit == mode
81
73
  if io and io.eof?
82
74
  list_i+=1
@@ -87,10 +79,8 @@ iit=Thread.new {
87
79
  ii,io,ie,it = Open3.popen3 "ffmpeg -loglevel -8 -i #{Shellwords.escape(list[list_i])} #{ssoff} #{FfmpegFmt} -"
88
80
  ii.close
89
81
  cycle=0 unless ssoff.length > 0
90
- puts "#{' '*help.length}\r#{list[list_i][prefix.length..-1]}"
91
- ssoff=''
92
- help=''
93
- mode=:play
82
+ puts "#{' '*help.length}\r#{list[list_i][prefix.length..-1]}" unless list[list_i].length == prefix.length
83
+ ssoff,help,mode='','',:play
94
84
  end
95
85
  bq.push io.read(Channels*Rate*WordSize)
96
86
  end
@@ -98,8 +88,8 @@ iit=Thread.new {
98
88
  }
99
89
 
100
90
  oot=Thread.new{
101
- until :quit == mode
102
- if :play == mode
91
+ until ( :quit == mode )
92
+ if ! bq.empty?
103
93
  oo.write bq.pop
104
94
  cycle+=1
105
95
  else
@@ -123,22 +113,23 @@ until :quit == mode
123
113
  mode=:load
124
114
  end
125
115
  when 's'
126
- print "Seek to: "
116
+ print 'Seek to: '
127
117
  ti=(ts=IO.console.readline.chomp).split(':')
128
118
  ssoff="-ss #{ts}"
129
119
  cycle=(ti[-1].to_f + ti[-2].to_f*60 + ti[-3].to_f*60*60).to_i
130
120
  mode=:load
131
121
  when 'q'
132
122
  mode=:quit
133
- File.write(ConfigDir+"/list",list.join("\n"))
134
- File.write(ConfigDir+"/pos",list_i.to_s+"\n"+cycle.to_s)
123
+ File.write(ConfigDir+'/list',list.join("\n"))
124
+ File.write(ConfigDir+'/pos',list_i.to_s+"\n"+cycle.to_s)
125
+ print_brand
135
126
  when ''
136
127
  sleep rand
137
128
  else
138
129
  print (help="#{ch} < #{list_i>0?"[P]rev ":""}[R]estart [S]eek [N]ext [Q]uit")
139
130
  end
140
131
  end
141
-
142
- puts "\r ] #{Pkg} ✝ v#{Ver} [ "
143
- iit.join
144
132
  oot.join
133
+ print_brand
134
+ puts
135
+
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Cook
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-13 00:00:00.000000000 Z
11
+ date: 2024-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pulseaudio_simple_ffi
14
+ name: pulseaudio_simple_fiddle
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '0.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.0.1
22
+ version: 0.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '0.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.0.1
32
+ version: 0.0.0
33
33
  description: rumu is an aggressively minimized audio player that plays a playlist
34
34
  gaplessly leveraging command-line ffmpeg and pipes. After a quit, it will return
35
35
  to where it left off when run next.
@@ -59,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
59
  version: '0'
60
60
  requirements:
61
61
  - ffmpeg
62
- rubygems_version: 3.2.15
62
+ rubygems_version: 3.3.15
63
63
  signing_key:
64
64
  specification_version: 4
65
65
  summary: "(ru)by (mu)usic - a minimal ffmpeg-based gapless audio playlist player"