pydub-lts 0.26.0__tar.gz
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.
- pydub_lts-0.26.0/AUTHORS +120 -0
- pydub_lts-0.26.0/CHANGELOG.md +199 -0
- pydub_lts-0.26.0/LICENSE +20 -0
- pydub_lts-0.26.0/MANIFEST.in +3 -0
- pydub_lts-0.26.0/PKG-INFO +398 -0
- pydub_lts-0.26.0/README.markdown +342 -0
- pydub_lts-0.26.0/pydub/__init__.py +1 -0
- pydub_lts-0.26.0/pydub/audio_segment.py +1478 -0
- pydub_lts-0.26.0/pydub/effects.py +402 -0
- pydub_lts-0.26.0/pydub/exceptions.py +32 -0
- pydub_lts-0.26.0/pydub/generators.py +142 -0
- pydub_lts-0.26.0/pydub/logging_utils.py +14 -0
- pydub_lts-0.26.0/pydub/playback.py +79 -0
- pydub_lts-0.26.0/pydub/pyaudioop.py +638 -0
- pydub_lts-0.26.0/pydub/scipy_effects.py +175 -0
- pydub_lts-0.26.0/pydub/silence.py +182 -0
- pydub_lts-0.26.0/pydub/utils.py +512 -0
- pydub_lts-0.26.0/pydub_lts.egg-info/PKG-INFO +398 -0
- pydub_lts-0.26.0/pydub_lts.egg-info/SOURCES.txt +24 -0
- pydub_lts-0.26.0/pydub_lts.egg-info/dependency_links.txt +1 -0
- pydub_lts-0.26.0/pydub_lts.egg-info/requires.txt +3 -0
- pydub_lts-0.26.0/pydub_lts.egg-info/top_level.txt +1 -0
- pydub_lts-0.26.0/setup.cfg +7 -0
- pydub_lts-0.26.0/setup.py +52 -0
- pydub_lts-0.26.0/test/test.py +2118 -0
pydub_lts-0.26.0/AUTHORS
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
James Robert
|
|
2
|
+
github: jiaaro
|
|
3
|
+
twitter: @jiaaro
|
|
4
|
+
web: jiaaro.com
|
|
5
|
+
email: pydub@jiaaro.com
|
|
6
|
+
|
|
7
|
+
Marc Webbie
|
|
8
|
+
github: marcwebbie
|
|
9
|
+
|
|
10
|
+
Jean-philippe Serafin
|
|
11
|
+
github: jeanphix
|
|
12
|
+
|
|
13
|
+
Anurag Ramdasan
|
|
14
|
+
github: AnuragRamdasan
|
|
15
|
+
|
|
16
|
+
Choongmin Lee
|
|
17
|
+
github: clee704
|
|
18
|
+
|
|
19
|
+
Patrick Pittman
|
|
20
|
+
github: ptpittman
|
|
21
|
+
|
|
22
|
+
Hunter Lang
|
|
23
|
+
github: hunterlang
|
|
24
|
+
|
|
25
|
+
Alexey
|
|
26
|
+
github: nihisil
|
|
27
|
+
|
|
28
|
+
Jaymz Campbell
|
|
29
|
+
github: jaymzcd
|
|
30
|
+
|
|
31
|
+
Ross McFarland
|
|
32
|
+
github: ross
|
|
33
|
+
|
|
34
|
+
John McMellen
|
|
35
|
+
github: jmcmellen
|
|
36
|
+
|
|
37
|
+
Johan Lövgren
|
|
38
|
+
github: dashj
|
|
39
|
+
|
|
40
|
+
Joachim Krüger
|
|
41
|
+
github: jkrgr
|
|
42
|
+
|
|
43
|
+
Shichao An
|
|
44
|
+
github: shichao-an
|
|
45
|
+
|
|
46
|
+
Michael Bortnyck
|
|
47
|
+
github: mbortnyck
|
|
48
|
+
|
|
49
|
+
André Cloete
|
|
50
|
+
github: aj-cloete
|
|
51
|
+
|
|
52
|
+
David Acacio
|
|
53
|
+
github: dacacioa
|
|
54
|
+
|
|
55
|
+
Thiago Abdnur
|
|
56
|
+
github: bolaum
|
|
57
|
+
|
|
58
|
+
Aurélien Ooms
|
|
59
|
+
github: aureooms
|
|
60
|
+
|
|
61
|
+
Mike Mattozzi
|
|
62
|
+
github: mmattozzi
|
|
63
|
+
|
|
64
|
+
Marcio Mazza
|
|
65
|
+
github: marciomazza
|
|
66
|
+
|
|
67
|
+
Sungsu Lim
|
|
68
|
+
github: proflim
|
|
69
|
+
|
|
70
|
+
Evandro Myller
|
|
71
|
+
github: emyller
|
|
72
|
+
|
|
73
|
+
Sérgio Agostinho
|
|
74
|
+
github: SergioRAgostinho
|
|
75
|
+
|
|
76
|
+
Sérgio Ferreira
|
|
77
|
+
github: sergiodeveloper
|
|
78
|
+
|
|
79
|
+
Antonio Larrosa
|
|
80
|
+
github: antlarr
|
|
81
|
+
|
|
82
|
+
Aaron Craig
|
|
83
|
+
github: craigthelinguist
|
|
84
|
+
|
|
85
|
+
Carlos del Castillo
|
|
86
|
+
github: greyalien502
|
|
87
|
+
|
|
88
|
+
Yudong Sun
|
|
89
|
+
github: sunjerry019
|
|
90
|
+
|
|
91
|
+
Jorge Perianez
|
|
92
|
+
github: JPery
|
|
93
|
+
|
|
94
|
+
Chendi Luo
|
|
95
|
+
github: Creonalia
|
|
96
|
+
|
|
97
|
+
Daniel Lefevre
|
|
98
|
+
gitHub: dplefevre
|
|
99
|
+
|
|
100
|
+
Grzegorz Kotfis
|
|
101
|
+
github: gkotfis
|
|
102
|
+
|
|
103
|
+
Pål Orby
|
|
104
|
+
github: orby
|
|
105
|
+
|
|
106
|
+
Ruben D
|
|
107
|
+
github: Ghostkeeper
|
|
108
|
+
|
|
109
|
+
Ryan McCauley
|
|
110
|
+
|
|
111
|
+
Pedro Lira
|
|
112
|
+
github: pedrohml
|
|
113
|
+
|
|
114
|
+
Faris Alasmary
|
|
115
|
+
|
|
116
|
+
Luca Cavasso
|
|
117
|
+
github: lcavasso
|
|
118
|
+
|
|
119
|
+
BreadMakesYouFat
|
|
120
|
+
github: BreadMakesYouFat
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# v0.26.0 (first release as `pydub-lts`)
|
|
2
|
+
Published as `pydub-lts` on PyPI; the import name is still `pydub`.
|
|
3
|
+
|
|
4
|
+
Python 3.13+
|
|
5
|
+
- Works on Python 3.13+, where `audioop` was removed: installs `audioop-lts` there, and the pure-Python fallback now works too (#4), including ulaw/alaw (#12)
|
|
6
|
+
|
|
7
|
+
Fixes
|
|
8
|
+
- `AudioSegment.export()` accepts an int `bitrate` instead of crashing with a `TypeError` (#3)
|
|
9
|
+
- A missing `ffprobe` raises an error that names it and how to configure it; `ffprobe`/`avprobe` next to a configured `AudioSegment.converter` is used when not on the PATH (#5)
|
|
10
|
+
- A missing ffmpeg/avconv converter raises a helpful error (#23)
|
|
11
|
+
- `from_file()` `parameters` are passed to ffmpeg before the output target, so they take effect (#7)
|
|
12
|
+
- Files whose name starts with a dash (`-a.mp3`) load (#9)
|
|
13
|
+
- Media files with no audio stream raise `CouldntDecodeError` (#2)
|
|
14
|
+
- Compressed WAV codecs decode with the width from `sample_fmt` (#20)
|
|
15
|
+
- `from_file()` always closes files it opened (#11)
|
|
16
|
+
- `play()` works on Windows: the ffplay temp file is closed before export (#19); ffplay runs quietly (#10)
|
|
17
|
+
- `stereo_to_ms` / `ms_to_stereo` no longer fail on a missing import (#1)
|
|
18
|
+
|
|
19
|
+
Performance
|
|
20
|
+
- `from_file(start_second=...)` seeks on the input side (#17)
|
|
21
|
+
- `effects.speedup` no longer copies audio quadratically (#16)
|
|
22
|
+
|
|
23
|
+
Merged upstream after 0.25.1 but never released
|
|
24
|
+
- Temporary files are deleted in `AudioSegment.export()` (jiaaro#665, Eric Joanis)
|
|
25
|
+
- Faster `AudioSegment` creation (jiaaro#686, Majed Bawarshi)
|
|
26
|
+
- `BufferedReader` instances are closed too (jiaaro#687, Pål Orby)
|
|
27
|
+
- No `json.loads()` crash on empty ffprobe output (jiaaro#652, Sara Zan)
|
|
28
|
+
- `--with-libvorbis` install hint fixed (jiaaro#577, Nicolas Raoul); invalid escape sequence warning fixed (Gleb Mazovetskiy)
|
|
29
|
+
|
|
30
|
+
Pull request numbers without a prefix refer to https://github.com/cyberpusa-ai/pydub.
|
|
31
|
+
|
|
32
|
+
# v0.25.1
|
|
33
|
+
- Fix crashing bug in new scipy-powered EQ effects
|
|
34
|
+
|
|
35
|
+
# v0.25.0
|
|
36
|
+
- Don't show a runtime warning about the optional ffplay dependency being missing until someone trys to use it
|
|
37
|
+
- Documentation improvements
|
|
38
|
+
- Python 3.9 support
|
|
39
|
+
- Improved efficiency of loading wave files with `pydub.AudioSegment.from_file()`
|
|
40
|
+
- Ensure `pydub.AudioSegment().export()` always retuns files with a seek position at the beginning of the file
|
|
41
|
+
- Added more EQ effects to `pydub.scipy_effects` (requires scipy to be installed)
|
|
42
|
+
- Fix a packaging bug where the LICENSE file was not included in the source distribution
|
|
43
|
+
- Add a way to instantiate a `pydub.AudioSegment()` with a portion of an audio file via `pydub.AudioSegment().from_file()`
|
|
44
|
+
|
|
45
|
+
# v0.24.1
|
|
46
|
+
- Fix bug where ffmpeg errors in Python 3 are illegible
|
|
47
|
+
- Fix bug where `split_on_silence` fails when there are one or fewer nonsilent segments
|
|
48
|
+
- Fix bug in fallback audioop implementation
|
|
49
|
+
|
|
50
|
+
# v0.24.0
|
|
51
|
+
- Fix inconsistent handling of 8-bit audio
|
|
52
|
+
- Fix bug where certain files will fail to parse
|
|
53
|
+
- Fix bug where pyaudio stream is not closed on error
|
|
54
|
+
- Allow codecs and parameters in wav and raw export
|
|
55
|
+
- Fix bug in `pydub.AudioSegment.from_file` where supplied codec is ignored
|
|
56
|
+
- Allow `pydub.silence.split_on_silence` to take a boolean for `keep_silence`
|
|
57
|
+
- Fix bug where `pydub.silence.split_on_silence` sometimes adds non-silence from adjacent segments
|
|
58
|
+
- Fix bug where `pydub.AudioSegment.extract_wav_headers` fails on empty wav files
|
|
59
|
+
- Add new function `pydub.silence.detect_leading_silence`
|
|
60
|
+
- Support conversion between an arbitrary number of channels and mono in `pydub.AudioSegment.set_channels`
|
|
61
|
+
- Fix several issues related to reading from filelike objects
|
|
62
|
+
|
|
63
|
+
# v0.23.1
|
|
64
|
+
- Fix bug in passing ffmpeg/avconv parameters for `pydub.AudioSegment.from_mp3()`, `pydub.AudioSegment.from_flv()`, `pydub.AudioSegment.from_ogg()`, and `pydub.AudioSegment.from_wav()`
|
|
65
|
+
- Fix logic bug in `pydub.effects.strip_silence()`
|
|
66
|
+
|
|
67
|
+
# v0.23.0
|
|
68
|
+
- Add support for playback via simpleaudio
|
|
69
|
+
- Allow users to override the type in `pydub.AudioSegment().get_array_of_samples()` (PR #313)
|
|
70
|
+
- Fix a bug where the wrong codec was used for 8-bit audio (PR #309 - issue #308)
|
|
71
|
+
|
|
72
|
+
# v0.22.1
|
|
73
|
+
- Fix `pydub.utils.mediainfo_json()` to work with newer, backwards-incompatible versions of ffprobe/avprobe
|
|
74
|
+
|
|
75
|
+
# v0.22.0
|
|
76
|
+
- Adds support for audio with frame rates (sample rates) of 48k and higher (requires scipy) (PR #262, fixes #134, #237, #209)
|
|
77
|
+
- Adds support for PEP 519 File Path protocol (PR #252)
|
|
78
|
+
- Fixes a few places where handles to temporary files are kept open (PR #280)
|
|
79
|
+
- Add the license file to the python package to aid other packaging projects (PR #279, fixes #274)
|
|
80
|
+
- Big fix for `pydub.silence.detect_silence()` (PR #263)
|
|
81
|
+
|
|
82
|
+
# v0.21.0
|
|
83
|
+
- NOTE: Semi-counterintuitive change: using the a stride when slicing AudioSegment instances (for example, `sound[::5000]`) will return chunks of 5000ms (not 1ms chunks every 5000ms) (#222)
|
|
84
|
+
- Debug output from ffmpeg/avlib is no longer printed to the console unless you set up logging (see README for how to set up logging for your converter) (#223)
|
|
85
|
+
- All pydub exceptions are now subclasses of `pydub.exceptions.PydubException` (PR #244)
|
|
86
|
+
- The utilities in `pydub.silence` now accept a `seek_step`argument which can optionally be passed to improve the performance of silence detection (#211)
|
|
87
|
+
- Fix to `pydub.silence` utilities which allow you to detect perfect silence (#233)
|
|
88
|
+
- Fix a bug where threaded code screws up your terminal session due to ffmpeg inheriting the stdin from the parent process. (#231)
|
|
89
|
+
- Fix a bug where a crashing programs using pydub would leave behind their temporary files (#206)
|
|
90
|
+
|
|
91
|
+
# v0.20.0
|
|
92
|
+
- Add new parameter `gain_during_overlay` to `pydub.AudioSegment.overlay` which allows users to adjust the volume of the target AudioSegment during the portion of the segment which is overlaid with the additional AudioSegment.
|
|
93
|
+
- `pydub.playback.play()` No longer displays the (very verbose) playback "banner" when using ffplay
|
|
94
|
+
- Fix a confusing error message when using invalid crossfade durations (issue #193)
|
|
95
|
+
|
|
96
|
+
# v0.19.0
|
|
97
|
+
- Allow codec and ffmpeg/avconv parameters to be set in the `pydub.AudioSegment.from_file()` for more control while decoding audio files
|
|
98
|
+
- Allow `AudioSegment` objects with more than two channels to be split using `pydub.AudioSegment().split_to_mono()`
|
|
99
|
+
- Add support for inverting the phase of only one channel in a multi-channel `pydub.AudioSegment` object
|
|
100
|
+
- Fix a bug with the latest avprobe that broke `pydub.utils.mediainfo()`
|
|
101
|
+
- Add tests for webm encoding/decoding
|
|
102
|
+
|
|
103
|
+
# v0.18.0
|
|
104
|
+
- Add a new constructor: `pydub.AudioSegment.from_mono_audiosegments()` which allows users to create a multi-channel audiosegment out of multiple mono ones.
|
|
105
|
+
- Refactor `pydub.AudioSegment._sync()` to support an arbitrary number of audiosegment arguments.
|
|
106
|
+
|
|
107
|
+
# v0.17.0
|
|
108
|
+
- Add the ability to add a cover image to MP3 exports via the `cover` keyword argument to `pydub.AudioSegment().export()`
|
|
109
|
+
- Add `pydub.AudioSegment().get_dc_offset()` and `pydub.AudioSegment().remove_dc_offset()` which allow detection and removal of DC offset in audio files.
|
|
110
|
+
- Minor fixes for windows users
|
|
111
|
+
|
|
112
|
+
# v0.16.7
|
|
113
|
+
- Make `pydub.AudioSegment()._spawn()` accept array.array instances containing audio samples
|
|
114
|
+
|
|
115
|
+
# v0.16.6
|
|
116
|
+
- Make `pydub.AudioSegment()` objects playable inline in ipython notebooks.
|
|
117
|
+
- Add scipy powered high pass, low pass, and band pass filters, which can be high order filters (they take `order` as a keyword argument). They are used for `pydub.AudioSegment().high_pass_filter()`, `pydub.AudioSegment().low_pass_filter()`, `pydub.AudioSegment().band_pass_filter()` when the `pydub.scipy_effects` module is imported.
|
|
118
|
+
- Fix minor bug in `pydub.silence.detect_silence()`
|
|
119
|
+
|
|
120
|
+
# v0.16.5
|
|
121
|
+
- Update `pydub.AudioSegment()._spawn()` method to allow user subclassing of `pydub.AudioSegment`
|
|
122
|
+
- Add a workaround for incorrect duration reporting of some mp3 files on macOS
|
|
123
|
+
|
|
124
|
+
# v0.16.4
|
|
125
|
+
- Add support for radd (basically, allow `sum()` to operate on an iterable of `pydub.AudioSegment()` objects)
|
|
126
|
+
- Fix bug in 24-bit wav support (understatement. It didn't work right at all the first time)
|
|
127
|
+
|
|
128
|
+
# v0.16.3
|
|
129
|
+
- Add support for python 3.5 (overstatement. We just added python 3.5 to CI and it worked 😄)
|
|
130
|
+
- Add native support for 24-bit wav files (ffmpeg/avconv not required)
|
|
131
|
+
|
|
132
|
+
# v0.16.2
|
|
133
|
+
- Fix bug where you couldn't directly instantiate `pydub.AudioSegment` with `bytes` data in python 3
|
|
134
|
+
|
|
135
|
+
# v0.16.1
|
|
136
|
+
- pydub will use any ffmpeg/avconv binary that's in the current directory (as reported by `os.getcwd()`) before searching for a system install
|
|
137
|
+
|
|
138
|
+
# v0.16.0
|
|
139
|
+
- Make it easier to instantiate `pydub.AudioSegment()` directly when creating audio segments from raw audio data (without having to write it to a file first)
|
|
140
|
+
- Add `pydub.AudioSegment().get_array_of_samples()` method which returns the samples which make up an audio segment (you should usually prefer this over `pydub.AudioSegment().raw_data`)
|
|
141
|
+
- Add `pydub.AudioSegment().raw_data` property which returns the raw audio data for an audio segment as a bytes (python 3) or a bytestring (python 3)
|
|
142
|
+
- Allow users to specify frame rate in `pydub.AudioSegment.silent()` constructor
|
|
143
|
+
|
|
144
|
+
# v0.15.0
|
|
145
|
+
- Add support for RAW audio (basically WAV format, but without wave headers)
|
|
146
|
+
- Add a new exception `pydub.exceptions.CouldntDecodeError` to indicate a failure of ffmpeg/avconv to decode a file (as indicated by ffmpeg/avconv exit code)
|
|
147
|
+
|
|
148
|
+
# v0.14.2
|
|
149
|
+
- Fix a bug in python 3.4 which failed to read wave files with no audio data (should have been audio segments with a duration of 0 ms)
|
|
150
|
+
|
|
151
|
+
# v0.14.1
|
|
152
|
+
- Fix a bug in `pydub.utils.mediainfo()` that caused inputs containing unescaped characters to raise a runtime error (inputs are not supposed to require escaping)
|
|
153
|
+
|
|
154
|
+
# v0.14.0
|
|
155
|
+
- Rename `pydub.AudioSegment().set_gain()` to `pydub.AudioSegment().apply_gain_stereo()` to better reflect it's place in the world (as a counterpart to `pydub.AudioSegment().apply_gain()`)
|
|
156
|
+
|
|
157
|
+
# v0.13.0
|
|
158
|
+
- Add `pydub.AudioSegment().pan()` which returns a new stereo audio segment panned left/right as specified.
|
|
159
|
+
|
|
160
|
+
# v0.12.0
|
|
161
|
+
- Add a logger, `"pydub.converter"` which logs the ffmpeg commands being run by pydub.
|
|
162
|
+
- Add `pydub.AudioSegment().split_to_mono()` method which returns a list of mono audio segments. One for each channel in the original audio segment.
|
|
163
|
+
- Fix a bug in `pydub.silence.detect_silence()` which caused the function to break when a silent audio segment was equal in length to the minimum silence length. It should report a single span of silence covering the whole silent audio segment. Now it does.
|
|
164
|
+
- Fix a bug where uncommon wav formats (those not supported by the stdlib wave module) would throw an exception rather than converting to a more common format via ffmpeg/avconv
|
|
165
|
+
|
|
166
|
+
# v0.11.0
|
|
167
|
+
- Add `pydub.AudioSegment().max_dBFS` which reports the loudness (in dBFS) of the loudest point (i.e., highest amplitude sample) of an audio segment
|
|
168
|
+
|
|
169
|
+
# v0.10.0
|
|
170
|
+
- Overhaul Documentation
|
|
171
|
+
- Improve performance of `pydub.AudioSegment().overlay()`
|
|
172
|
+
- Add `pydub.AudioSegment().invert_phase()` which (shocker) inverts the phase of an audio segment
|
|
173
|
+
- Fix a type error in `pydub.AudioSegment.get_sample_slice()`
|
|
174
|
+
|
|
175
|
+
# v0.9.5
|
|
176
|
+
- Add `pydub.generators` module containing simple signal generation functions (white noise, sine, square wave, etc)
|
|
177
|
+
- Add a `loops` keyword argument to `pydub.AudioSegment().overlay()` which allows users to specify that the overlaid audio should be repeated (i.e., looped) a certain number of times, or indefinitely
|
|
178
|
+
|
|
179
|
+
# 0.9.4
|
|
180
|
+
- Fix a bug in db_to_float() where all values were off by a factor of 2
|
|
181
|
+
|
|
182
|
+
# 0.9.3
|
|
183
|
+
- Allow users to set the location of their converter by setting `pydub.AudioSegment.converter = "/path/to/ffmpeg"` and added a shim to support the old method of assigning to `pydub.AudioSegment.ffmpeg` (which is deprecated now that we support avconv)
|
|
184
|
+
|
|
185
|
+
# v0.9.2
|
|
186
|
+
- Add support for Python 3.4
|
|
187
|
+
- Audio files opened with format "wave" are treated as "wav" and "m4a" are treated as "mp4"
|
|
188
|
+
- Add `pydub.silence` module with simple utilities for detecting and removing silence.
|
|
189
|
+
- Fix a bug affecting auto-detection of ffmpeg/avconv on windows.
|
|
190
|
+
- Fix a bug that caused pydub to only work when ffmpeg/avconv is present (it should be able to work with WAV data without any dependencies)
|
|
191
|
+
|
|
192
|
+
# v0.9.1
|
|
193
|
+
- Add a runtime warning when ffmpeg/avconv cannot be found to aid debugging
|
|
194
|
+
|
|
195
|
+
# v0.9.0
|
|
196
|
+
- Added support for pypy (by reimplementing audioop in python). Also, we contributed our implementation to the pypy project, so that's 💯
|
|
197
|
+
- Add support for avconv as an alternative to ffmpeg
|
|
198
|
+
- Add a new helper module `pydub.playback` which allows you to quickly listen to an audio segment using ffplay (or avplay)
|
|
199
|
+
- Add new function `pydub.utils.mediainfo('/path/to/audio/file.ext')` which reports back the results of ffprobe (or avprobe) including codec, bitrate, channels, etc
|
pydub_lts-0.26.0/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2011 James Robert, http://jiaaro.com
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|